mlb_api/endpoints/
links.rs1use 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}