mlb_api/endpoints/
links.rs

1use serde::de::DeserializeOwned;
2use crate::request;
3
4pub trait Url<T: DeserializeOwned>: ToString {
5    #[cfg(feature = "ureq")]
6    fn get(&self) -> request::Result<T> where Self: Sized {
7        request::get(self)
8    }
9
10    #[cfg(feature = "reqwest")]
11    fn get(&self) -> impl Future<Output = request::Result<T>> where Self: Sized {
12        request::get(self)
13    }
14}
15
16#[macro_export]
17macro_rules! gen_params {
18    (@ $builder:ident $key:literal: $value:expr $(, $($rest:tt)*)?) => {{
19        let is_empty = $builder.is_empty();
20        let _ = write!(&mut $builder, "{prefix}{key}={value}", key = $key, value = $value, prefix = if is_empty { '?' } else { '&' });
21        gen_params!(@ $builder $($($rest)*)? );
22    }};
23    (@ $builder:ident $key:literal?: $value:expr $(, $($rest:tt)*)?) => {{
24        if let Option::Some(value) = $value {
25            let is_empty = $builder.is_empty();
26            let _ = write!(&mut $builder, "{prefix}{key}={value}", key = $key, prefix = if is_empty { '?' } else { '&' });
27        }
28        gen_params!(@ $builder $($($rest)*)? );
29    }};
30    (@ $builder:ident $(,)?) => {};
31    ($($args:tt)*) => {{
32        use ::core::fmt::Write;
33        
34        let mut builder = String::new();
35        gen_params! { @ builder $($args)* }
36        builder
37    }};
38}