12个版本

0.3.6 2022年11月21日
0.3.4 2022年11月3日
0.3.3 2022年10月31日
0.3.0 2022年9月20日

#1556 in 过程宏

27 每月下载量
6 个crate中使用 (直接使用3个)

MIT 许可证

1MB
23K SLoC

COSMIC MACROS

cosmic-macros 是构成 THE COSMIC INITIATIVE(一个WebAssembly编排框架)的包之一。

DirectedHandler

通过DirectedHandler派生以接收波浪

#[derive(DirectedHandler)]
pub struct MyHandler {
  logger: PointLogger
}

ROUTES

使用#[routes]标记唯一一个impl,并使用#route[()]注释函数以选择消息

#[routes]
impl MyHandler {
   #[route("Ext<MyNameIs>")]
   pub async fn hello(&self, ctx: InCtx<'_, Text>) -> Result<String, UniErr> {
     Ok(format!("Hello, {}", ctx.input.to_string()))
   }
}

完整示例

use cosmic_space::err::UniErr;
use cosmic_space::hyper::HyperSubstance;
use cosmic_space::log::PointLogger;
use cosmic_space::substance::Substance;
use cosmic_space::substance::Substance::Text;
use cosmic_space::wave::core::ReflectedCore;
use cosmic_space::wave::exchange::InCtx;

#[derive(DirectedHandler)]
pub struct MyHandler {
  logger: PointLogger
}

#[routes]
impl MyHandler {
   /// the route attribute captures an ExtMethod implementing a custom `MyNameIs`
   /// notice that the InCtx will accept any valid cosmic_space::substance::Substance
   #[route("Ext<MyNameIs>")]
   pub async fn hello(&self, ctx: InCtx<'_, Text>) -> Result<String, UniErr> {
     /// also we can return any Substance in our Reflected wave
     Ok(format!("Hello, {}", ctx.input.to_string()))
   }

   /// if the function returns nothing then an Empty Ok Reflected will be returned unless
   /// the wave type is `Wave<Signal>`
   #[route("Ext<Bye>")]
   pub async fn bye(&self, ctx: InCtx<'_,()>) {
     self.logger.info("funny that! He left without saying a word!");
   }
}

依赖

~12–21MB
~318K SLoC