1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
/*
* Copyright (c) Dell Inc., or its subsidiaries. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
//! Retry is a crate for retrying something that can fail with exponential backoff.
//! It is designed to have a declarative interface for ease of use.
//! It can be used as follows:
//! ```
//! # use pravega_client_retry::retry_policy::RetryWithBackoff;
//! # use pravega_client_retry::retry_result::RetryResult;
//! # use pravega_client_retry::retry_sync::retry_sync;
//! # use snafu::Snafu;
//!
//! #[derive(Debug, PartialEq, Eq, Snafu)]
//! pub enum SnafuError {
//! #[snafu(display("Retryable error"))]
//! Retryable,
//! #[snafu(display("NonRetryable error"))]
//! Nonretryable,
//! }
//!
//! let retry_policy = RetryWithBackoff::default().max_tries(1);
//! let mut collection = vec![1, 2].into_iter();
//! let value = retry_sync(retry_policy, || match collection.next() {
//! Some(n) if n == 2 => RetryResult::Success(n),
//! Some(_) => RetryResult::Retry(SnafuError::Retryable),
//! None => RetryResult::Fail(SnafuError::Nonretryable),
//! }).unwrap();
//!
//! assert_eq!(value, 2);
//!
//! ```
//! The above will retry the code 1 times if it throws Err(Retry::Retry).
//! If it throws a Err(Retry::Err) or returns successfully it will return immediately.
//! The delay following each of the filed attempts would be 1, 10,respectively.
//! If all retries fail, it will return Err(RetryErr) that has error message.
//!
#![deny(
clippy::all,
clippy::cargo,
clippy::else_if_without_else,
clippy::empty_line_after_outer_attr,
clippy::multiple_inherent_impl,
clippy::mut_mut,
clippy::path_buf_push_overwrite
)]
#![warn(
clippy::cargo_common_metadata,
clippy::mutex_integer,
clippy::needless_borrow,
clippy::similar_names
)]
#![allow(clippy::multiple_crate_versions)]
pub mod retry_async;
pub mod retry_policy;
pub mod retry_result;
pub mod retry_sync;