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();
}