pub mod client;
pub mod error;
pub mod request;
pub mod retry;
pub use client::{Client, HttpTransport, Transport};
pub use error::{Attempt, Disposition, RetryReason};
pub use request::Request;
pub use retry::{Clock, Outcome, RetryPolicy, SystemClock};
use crate::actions::Level;
pub fn deliver<T: Transport, C: Clock>(
client: &Client<T>,
request: &Request,
policy: RetryPolicy,
clock: &C,
log: &dyn Fn(Level, &str),
) -> Outcome {
let endpoint = request.endpoint();
let body = request.to_body();
retry::execute(|_| client.call(endpoint, &body), policy, clock, log)
}