1#[macro_export]
2macro_rules! fetch_macro {
3 ($url:expr) => {
4 fetchlike::fetch(fetchlike::Request {
5 url: $url.parse()?,
6 ..Default::default()
7 })
8 };
9 ($url:expr, {$($tree:tt)+}) => {
10 {
11 let _method = fetchlike::Method::GET;
12 let _headers: Option<fetchlike::HeaderMap> = None;
13 let _body = fetchlike::Body::empty();
14 fetchlike::__parse_tree!(_method, _headers, _body, $($tree)+);
15
16 fetchlike::fetch(fetchlike::Request {
17 url: $url.parse()?,
18 method: _method,
19 headers: _headers,
20 body: _body
21 })
22 }
23 };
24}
25
26#[macro_export]
27macro_rules! __parse_tree {
28 ($method:ident, $headers:ident, $body:ident, headers: {$($field:tt: $value:expr),*}) => {
29 let $headers = {
30 let mut map = fetchlike::HeaderMap::new();
31 $(map.insert(
32 $field,
33 $value.parse()?,
34 );)*
35 Some(map)
36 };
37 };
38 ($method:ident, $headers:ident, $body:ident, headers: {$($field:tt: $value:expr),* $(,)*} $(,)*) => {
39 fetchlike::__parse_tree!($method, $headers, $body, headers: {$($field: $value),*});
40 };
41 ($method:ident, $headers:ident, $body:ident, headers: {$($field:tt: $value:expr),*}, $($tree:tt)+) => {
42 fetchlike::__parse_tree!($method, $headers, $body, headers: {$($field: $value),*});
43 fetchlike::__parse_tree!($method, $headers, $body, $($tree)+);
44 };
45
46 ($method:ident, $headers:ident, $body:ident, $field:ident: $value:expr) => {
47 fetchlike::__parse_field!($method, $headers, $body, $field: $value);
48 };
49 ($method:ident, $headers:ident, $body:ident, $field:ident: $value:expr $(,)*) => {
50 fetchlike::__parse_tree!($method, $headers, $body, $field: $value);
51 };
52 ($method:ident, $headers:ident, $body:ident, $field:ident: $value:expr, $($tree:tt)+) => {
53 fetchlike::__parse_tree!($method, $headers, $body, $field: $value);
54 fetchlike::__parse_tree!($method, $headers, $body, $($tree)+);
55 };
56}
57
58#[macro_export]
59macro_rules! __parse_field {
60 ($method:ident, $headers:ident, $body:ident, method: $value:expr) => {
61 let $method = fetchlike::Method::from_bytes($value.as_bytes())?;
62 };
63 ($method:ident, $headers:ident, $body:ident, body: $value:expr) => {
64 let $body = fetchlike::Body::from($value.to_string());
65 };
66}