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