mod context;
mod registry;
mod serve;
pub use context::{generate_request_id, Ctx, FunctionError};
pub use registry::{Outcome, Registry, StreamItems};
pub use serve::serve;
#[macro_export]
macro_rules! serve {
(@register $registry:ident, stream $name:ident, $($rest:tt)*) => {
$registry.stream_function(stringify!($name), $name);
$crate::serve!(@register $registry, $($rest)*);
};
(@register $registry:ident, $name:ident, $($rest:tt)*) => {
$registry.function(stringify!($name), $name);
$crate::serve!(@register $registry, $($rest)*);
};
(@register $registry:ident, stream $name:ident) => {
$registry.stream_function(stringify!($name), $name);
};
(@register $registry:ident, $name:ident) => {
$registry.function(stringify!($name), $name);
};
(@register $registry:ident,) => {};
(@register $registry:ident) => {};
( $($tokens:tt)+ ) => {
fn main() {
let mut registry = $crate::Registry::new();
$crate::serve!(@register registry, $($tokens)+);
$crate::serve(registry);
}
};
}