mir/
macro.rs

1/// import!("bytes", a, b, c);
2/// import!("bytes");
3/// import!("bytes::*");
4/// import!(pub "bytes::*");
5#[macro_export]
6macro_rules! import {
7    ($path:literal) => {
8        ::mir::Import::package($path)
9    };
10    ($path:literal, $($imports:ident),*) => {
11        ::mir::Import::new($path, vec![$(stringify!($imports)),*])
12    };
13    (pub $path:literal, $($imports:ident),*) => {
14        ::mir::Import::new($path, vec![$(stringify!($imports)),*]).public()
15    };
16    ($path:path, $($imports:ident),*) => {
17        ::mir::Import::new(stringify!($path), vec![$(stringify!($imports)),*])
18    };
19    (pub $path:path, $($imports:ident),*) => {
20        ::mir::Import::new(stringify!($path), vec![$(stringify!($imports)),*]).public()
21    };
22    ($c:expr, $($imports:expr),*) => {
23        ::mir::Import::new($c, vec![$($imports),*])
24    };
25    ($c:expr) => {
26        ::mir::Import::package($c)
27    };
28}
29/// Macro to create a FnArg. Called targ because the type is a TokenStream (specifically a path), rather than a &str.
30/// targ!(access_token: String)
31#[macro_export]
32macro_rules! targ {
33    ($name:ident : $ty:path) => {
34        ::mir::FnArg {
35            name: stringify!($name).to_string(),
36            ty: {
37                let ty = ::syn::parse_str::<::syn::Ident>(stringify!($ty)).unwrap();
38                ::quote::ToTokens::to_token_stream(&ty)
39            },
40            default: None,
41            treatment: None,
42        }
43    };
44}
45/// Macro to create a FnArg. Second arg is a expr that evaluates to a string. Optionally takes a default.
46/// arg!(count: "int" = 500)
47#[macro_export]
48macro_rules! arg {
49    ($name:ident : $ty:expr) => {
50        ::mir::FnArg {
51            name: ::mir::ArgIdent::from(stringify!($name)),
52            ty: $ty.to_string(),
53            default: None,
54            treatment: None,
55        }
56    };
57    ($name:ident : $ty:expr , $default:expr) => {
58        ::mir::FnArg {
59            name: ::mir::ArgIdent::from(stringify!($name).to_string()),
60            ty: $ty.to_string(),
61            default: $default.to_string(),
62            treatment: None,
63        }
64    };
65}
66
67/// A literal value.
68#[macro_export]
69macro_rules! lit {
70    ($($arg:tt)*) => {
71        ::mir::Literal(format!($($arg)*));
72    };
73}