use std::fmt;
mod error;
pub use error::{PropagationForwarderError, PropagationForwarderResult};
use super::propagation::{PropagatedBearer, PropagationRequestTarget, TokenPropagator};
pub trait PropagationForwarderConfigSource: fmt::Debug {
type Forwarder: PropagationForwarder;
type Error: std::error::Error;
fn build_forwarder(&self) -> Result<Self::Forwarder, Self::Error>;
}
pub trait PropagationForwarder: fmt::Debug + Clone + Send + Sync + 'static {
type Body: Send + 'static;
fn forward(
&self,
propagator: &TokenPropagator,
bearer: &PropagatedBearer<'_>,
target: &PropagationRequestTarget,
request: http::Request<Self::Body>,
) -> impl Future<Output = Result<http::Response<Self::Body>, PropagationForwarderError>> + Send;
}
#[cfg(feature = "axum-reverse-proxy-propagation-forwarder")]
mod axum_reverse_proxy;
#[cfg(feature = "axum-reverse-proxy-propagation-forwarder")]
pub use axum_reverse_proxy::{
AxumReverseProxyPropagationForwarder, AxumReverseProxyPropagationForwarderConfig,
};