| Crates.io | cosmic-macros |
| lib.rs | cosmic-macros |
| version | 0.3.14 |
| created_at | 2022-09-20 00:19:48.38048+00 |
| updated_at | 2024-08-31 19:09:47.596766+00 |
| description | macros for thecosmicinitiative.io |
| homepage | https://starlane.io |
| repository | https://github.com/cosmic-initiative/cosmic-initiative.git |
| max_upload_size | |
| id | 669466 |
| size | 19,964 |
cosmic-macros is one of the packages that compose THE COSMIC INITIATIVE a WebAssembly orchestration framework.
Derive the DirectedHandler to receive Waves:
#[derive(DirectedHandler)]
pub struct MyHandler {
logger: PointLogger
}
Flag one and only one impl with #[routes] and annotate functions
functions with #route[()] in order to select messages:
#[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!");
}
}