mod into_http;
mod reply;
mod request;
use std::fmt::Debug;
use std::sync::Arc;
pub use self::into_http::*;
pub use self::reply::*;
pub use self::request::*;
pub trait Provider: Send + Sync {}
impl<T> Provider for T where T: Send + Sync {}
#[derive(Clone, Debug)]
pub struct Client<P> {
owner: Arc<str>,
provider: Arc<P>,
}
impl Client<NoProvider> {
#[must_use]
pub fn new(owner: impl Into<String>) -> Self {
Self {
owner: Arc::<str>::from(owner.into()),
provider: Arc::new(NoProvider),
}
}
#[must_use]
pub fn provider<P: Provider>(self, provider: P) -> Client<P> {
Client {
owner: self.owner,
provider: Arc::new(provider),
}
}
}
impl<P: Provider> Client<P> {
pub fn request<R: Handler<P>>(
&self, request: R,
) -> RequestHandler<RequestSet<R, P>, OwnerSet<'_>, ProviderSet<'_, P>> {
RequestHandler::from_client(self, request)
}
}
pub trait Body: Debug + Send + Sync {}
impl<T> Body for T where T: Debug + Send + Sync {}