use crate::Conn;
use trillium_http::Method;
use trillium_server_common::{Connector, ObjectSafeConnector, Url};
macro_rules! method {
($fn_name:ident, $method:ident) => {
method!(
$fn_name,
$method,
concat!(
"Builds a new client conn with the ",
stringify!($fn_name),
" http method and the provided url.
"
)
);
};
($fn_name:ident, $method:ident, $doc_comment:expr) => {
#[doc = $doc_comment]
fn $fn_name(&self, url: Url) -> Conn
where
Self: Sized,
{
self.build_conn(Method::$method, url)
}
};
}
pub trait ClientLike {
fn build_conn(&self, method: Method, url: Url) -> Conn;
method!(get, Get);
method!(post, Post);
method!(put, Put);
method!(delete, Delete);
method!(patch, Patch);
}
impl<C: Connector + Clone> ClientLike for C {
fn build_conn(&self, method: Method, url: Url) -> Conn {
Conn::new_with_config(self.clone().arced(), method, url)
}
}