mlb_api/endpoints/
links.rs

1use crate::request;
2use serde::de::DeserializeOwned;
3
4#[cfg(all(feature = "reqwest", feature = "ureq"))]
5compile_error!("Only one http backend is allowed!");
6
7pub trait StatsAPIUrl: ToString {
8    type Response: DeserializeOwned;
9
10	#[cfg(feature = "ureq")]
11	fn get(&self) -> request::Result<Self::Response>
12	where
13		Self: Sized,
14	{
15		request::get(self)
16	}
17
18	#[cfg(feature = "reqwest")]
19	fn get(&self) -> impl Future<Output = request::Result<Self::Response>>
20	where
21		Self: Sized,
22	{
23		request::get(self)
24	}
25}
26
27#[macro_export]
28macro_rules! gen_params {
29    (@ $builder:ident $key:literal: $value:expr $(, $($rest:tt)*)?) => {
30        let is_empty = $builder.is_empty();
31        let _ = write!(&mut $builder, "{prefix}{key}={value}", key = $key, value = $value, prefix = if is_empty { '?' } else { '&' });
32        gen_params!(@ $builder $($($rest)*)? );
33    };
34    (@ $builder:ident $key:literal?: $value:expr $(, $($rest:tt)*)?) => {
35        if let Option::Some(value) = $value {
36            let is_empty = $builder.is_empty();
37            let _ = write!(&mut $builder, "{prefix}{key}={value}", key = $key, prefix = if is_empty { '?' } else { '&' });
38        }
39        gen_params!(@ $builder $($($rest)*)? );
40    };
41    (@ $builder:ident $value:expr $(, $($rest:tt)*)?) => {
42        let is_empty = $builder.is_empty();
43        let _ = write!(&mut $builder, "{prefix}{value}", value = $value, prefix = if is_empty { '?' } else { '&' });
44        gen_params!(@ $builder $($($rest)*)?);
45    };
46    (@ $builder:ident $(,)?) => {};
47    ($($args:tt)*) => {{
48        use ::core::fmt::Write;
49
50        let mut builder = String::new();
51        gen_params! { @ builder $($args)* }
52        builder
53    }};
54}