do-over 0.1.0

Async resilience policies for Rust inspired by Polly
Documentation
//! HTTP Service Example
//!
//! This example shows how to integrate do-over policies with an axum web service.

use axum::{routing::get, Router};
use do_over::{error::DoOverError, policy::Policy, retry::RetryPolicy, timeout::TimeoutPolicy, wrap::Wrap};
use std::time::Duration;
use tokio::net::TcpListener;

#[tokio::main]
async fn main() {
    let policy = Wrap::new(
        RetryPolicy::fixed(2, Duration::from_millis(50)),
        TimeoutPolicy::new(Duration::from_secs(1)),
    );

    let app = Router::new().route(
        "/",
        get(|| async move {
            let result: Result<&str, DoOverError<()>> =
                policy.execute(|| async { Ok("hello from do-over") }).await;
            result.unwrap()
        }),
    );

    println!("Starting server on http://0.0.0.0:3000");
    let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}