use crate::HttpRetryMethodPolicy;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct HttpRequestRetryOverride {
force_enable: bool,
force_disable: bool,
method_policy: Option<HttpRetryMethodPolicy>,
honor_retry_after: bool,
}
impl HttpRequestRetryOverride {
pub fn new() -> Self {
Self::default()
}
pub fn force_enable(mut self) -> Self {
self.force_enable = true;
self.force_disable = false;
self
}
pub fn force_disable(mut self) -> Self {
self.force_disable = true;
self.force_enable = false;
self
}
pub fn with_method_policy(mut self, policy: HttpRetryMethodPolicy) -> Self {
self.method_policy = Some(policy);
self
}
pub fn with_honor_retry_after(mut self, enabled: bool) -> Self {
self.honor_retry_after = enabled;
self
}
pub fn is_force_enable(&self) -> bool {
self.force_enable
}
pub fn is_force_disable(&self) -> bool {
self.force_disable
}
pub fn method_policy(&self) -> Option<HttpRetryMethodPolicy> {
self.method_policy
}
pub fn should_honor_retry_after(&self) -> bool {
self.honor_retry_after
}
pub(crate) fn resolve_enabled(&self, client_enabled: bool) -> bool {
if self.force_disable {
false
} else if self.force_enable {
true
} else {
client_enabled
}
}
pub(crate) fn resolve_method_policy(
&self,
client_policy: HttpRetryMethodPolicy,
) -> HttpRetryMethodPolicy {
self.method_policy.unwrap_or(client_policy)
}
}