atomfn 0.1.2

AtomService 函数服务 Rust SDK:与 TS SDK 协议一致的常驻 HTTP 运行时
Documentation
mod context;
mod registry;
mod serve;

pub use context::{generate_request_id, Ctx, FunctionError};
pub use registry::{FunctionConfig, 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);
        }
    };
}