#[non_exhaustive]pub struct RetryConfig {
pub max_attempts: NonZeroU32,
pub min_base_delay: Duration,
pub max_base_delay: Duration,
pub append_retry_policy: AppendRetryPolicy,
}Expand description
Configuration for retrying requests in case of transient failures.
Exponential backoff with jitter is the retry strategy. Below is the pseudocode for the strategy:
base_delay = min(min_base_delay · 2ⁿ, max_base_delay) (n = retry attempt, starting from 0)
jitter = rand[0, base_delay]
delay = base_delay + jitterFields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.max_attempts: NonZeroU32Total number of attempts including the initial try. A value of 1 means no retries.
Defaults to 3.
min_base_delay: DurationMinimum base delay for retries.
Defaults to 100ms.
max_base_delay: DurationMaximum base delay for retries.
Defaults to 1s.
append_retry_policy: AppendRetryPolicyRetry policy for append and
append_session operations.
Defaults to All.
Implementations§
Source§impl RetryConfig
impl RetryConfig
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new RetryConfig with default settings.
Examples found in repository?
examples/docs_configuration.rs (line 33)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // Example: Custom endpoints (e.g., for s2-lite local dev)
14 {
15 let token = "local-token".to_string();
16 // ANCHOR: custom-endpoints
17 let endpoints = S2Endpoints::new(
18 AccountEndpoint::new("http://localhost:8080")?,
19 BasinEndpoint::new("http://localhost:8080")?,
20 )?;
21
22 let client = S2::new(S2Config::new(token).with_endpoints(endpoints))?;
23 // ANCHOR_END: custom-endpoints
24 println!("Created client with custom endpoints: {:?}", client);
25 }
26
27 // Example: Custom retry configuration
28 {
29 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
30 // ANCHOR: retry-config
31 let client = S2::new(
32 S2Config::new(token).with_retry(
33 RetryConfig::new()
34 .with_max_attempts(NonZeroU32::new(5).unwrap())
35 .with_min_base_delay(Duration::from_millis(100))
36 .with_max_base_delay(Duration::from_secs(2)),
37 ),
38 )?;
39 // ANCHOR_END: retry-config
40 println!("Created client with retry config: {:?}", client);
41 }
42
43 // Example: Custom timeout configuration
44 {
45 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
46 // ANCHOR: timeout-config
47 let client = S2::new(
48 S2Config::new(token)
49 .with_connection_timeout(Duration::from_secs(5))
50 .with_request_timeout(Duration::from_secs(10)),
51 )?;
52 // ANCHOR_END: timeout-config
53 println!("Created client with timeout config: {:?}", client);
54 }
55
56 Ok(())
57}Sourcepub fn with_max_attempts(self, max_attempts: NonZeroU32) -> Self
pub fn with_max_attempts(self, max_attempts: NonZeroU32) -> Self
Set the total number of attempts including the initial try.
Examples found in repository?
examples/docs_configuration.rs (line 34)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // Example: Custom endpoints (e.g., for s2-lite local dev)
14 {
15 let token = "local-token".to_string();
16 // ANCHOR: custom-endpoints
17 let endpoints = S2Endpoints::new(
18 AccountEndpoint::new("http://localhost:8080")?,
19 BasinEndpoint::new("http://localhost:8080")?,
20 )?;
21
22 let client = S2::new(S2Config::new(token).with_endpoints(endpoints))?;
23 // ANCHOR_END: custom-endpoints
24 println!("Created client with custom endpoints: {:?}", client);
25 }
26
27 // Example: Custom retry configuration
28 {
29 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
30 // ANCHOR: retry-config
31 let client = S2::new(
32 S2Config::new(token).with_retry(
33 RetryConfig::new()
34 .with_max_attempts(NonZeroU32::new(5).unwrap())
35 .with_min_base_delay(Duration::from_millis(100))
36 .with_max_base_delay(Duration::from_secs(2)),
37 ),
38 )?;
39 // ANCHOR_END: retry-config
40 println!("Created client with retry config: {:?}", client);
41 }
42
43 // Example: Custom timeout configuration
44 {
45 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
46 // ANCHOR: timeout-config
47 let client = S2::new(
48 S2Config::new(token)
49 .with_connection_timeout(Duration::from_secs(5))
50 .with_request_timeout(Duration::from_secs(10)),
51 )?;
52 // ANCHOR_END: timeout-config
53 println!("Created client with timeout config: {:?}", client);
54 }
55
56 Ok(())
57}Sourcepub fn with_min_base_delay(self, min_base_delay: Duration) -> Self
pub fn with_min_base_delay(self, min_base_delay: Duration) -> Self
Set the minimum base delay for retries.
Examples found in repository?
examples/docs_configuration.rs (line 35)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // Example: Custom endpoints (e.g., for s2-lite local dev)
14 {
15 let token = "local-token".to_string();
16 // ANCHOR: custom-endpoints
17 let endpoints = S2Endpoints::new(
18 AccountEndpoint::new("http://localhost:8080")?,
19 BasinEndpoint::new("http://localhost:8080")?,
20 )?;
21
22 let client = S2::new(S2Config::new(token).with_endpoints(endpoints))?;
23 // ANCHOR_END: custom-endpoints
24 println!("Created client with custom endpoints: {:?}", client);
25 }
26
27 // Example: Custom retry configuration
28 {
29 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
30 // ANCHOR: retry-config
31 let client = S2::new(
32 S2Config::new(token).with_retry(
33 RetryConfig::new()
34 .with_max_attempts(NonZeroU32::new(5).unwrap())
35 .with_min_base_delay(Duration::from_millis(100))
36 .with_max_base_delay(Duration::from_secs(2)),
37 ),
38 )?;
39 // ANCHOR_END: retry-config
40 println!("Created client with retry config: {:?}", client);
41 }
42
43 // Example: Custom timeout configuration
44 {
45 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
46 // ANCHOR: timeout-config
47 let client = S2::new(
48 S2Config::new(token)
49 .with_connection_timeout(Duration::from_secs(5))
50 .with_request_timeout(Duration::from_secs(10)),
51 )?;
52 // ANCHOR_END: timeout-config
53 println!("Created client with timeout config: {:?}", client);
54 }
55
56 Ok(())
57}Sourcepub fn with_max_base_delay(self, max_base_delay: Duration) -> Self
pub fn with_max_base_delay(self, max_base_delay: Duration) -> Self
Set the maximum base delay for retries.
Examples found in repository?
examples/docs_configuration.rs (line 36)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // Example: Custom endpoints (e.g., for s2-lite local dev)
14 {
15 let token = "local-token".to_string();
16 // ANCHOR: custom-endpoints
17 let endpoints = S2Endpoints::new(
18 AccountEndpoint::new("http://localhost:8080")?,
19 BasinEndpoint::new("http://localhost:8080")?,
20 )?;
21
22 let client = S2::new(S2Config::new(token).with_endpoints(endpoints))?;
23 // ANCHOR_END: custom-endpoints
24 println!("Created client with custom endpoints: {:?}", client);
25 }
26
27 // Example: Custom retry configuration
28 {
29 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
30 // ANCHOR: retry-config
31 let client = S2::new(
32 S2Config::new(token).with_retry(
33 RetryConfig::new()
34 .with_max_attempts(NonZeroU32::new(5).unwrap())
35 .with_min_base_delay(Duration::from_millis(100))
36 .with_max_base_delay(Duration::from_secs(2)),
37 ),
38 )?;
39 // ANCHOR_END: retry-config
40 println!("Created client with retry config: {:?}", client);
41 }
42
43 // Example: Custom timeout configuration
44 {
45 let token = std::env::var("S2_ACCESS_TOKEN").unwrap_or_else(|_| "demo".into());
46 // ANCHOR: timeout-config
47 let client = S2::new(
48 S2Config::new(token)
49 .with_connection_timeout(Duration::from_secs(5))
50 .with_request_timeout(Duration::from_secs(10)),
51 )?;
52 // ANCHOR_END: timeout-config
53 println!("Created client with timeout config: {:?}", client);
54 }
55
56 Ok(())
57}Sourcepub fn with_append_retry_policy(
self,
append_retry_policy: AppendRetryPolicy,
) -> Self
pub fn with_append_retry_policy( self, append_retry_policy: AppendRetryPolicy, ) -> Self
Set the retry policy for append and
append_session operations.
Trait Implementations§
Source§impl Clone for RetryConfig
impl Clone for RetryConfig
Source§fn clone(&self) -> RetryConfig
fn clone(&self) -> RetryConfig
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for RetryConfig
impl Debug for RetryConfig
Auto Trait Implementations§
impl Freeze for RetryConfig
impl RefUnwindSafe for RetryConfig
impl Send for RetryConfig
impl Sync for RetryConfig
impl Unpin for RetryConfig
impl UnwindSafe for RetryConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more