1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#[macro_export] macro_rules! run { ($addr:expr, $($module:ident),+) => { vial::run($addr, vec![$($module::vial_recognize),+]); }; ($addr:expr) => { vial::run($addr, vec![vial_recognize]); }; } #[macro_export] macro_rules! vial { ( $($method:ident $path:expr => $body:expr;)* ) => { fn vial_check_method() { #[allow(non_snake_case)] fn GET() {} #[allow(non_snake_case)] fn POST() {} $($method();)* } pub(crate) fn vial_recognize(req: &::vial::Request) -> Option<fn(::vial::Request) -> ::vial::Response> { match (req.method(), req.path()) { $( (stringify!($method), $path) => Some($body), )* _ => None, } } }; } macro_rules! error { ($msg:expr) => { std::io::Error::new(std::io::ErrorKind::Other, $msg) }; ($fmt:expr, $($args:expr),*) => { error!(format!($fmt, $($args),*)) }; }