8 releases

0.0.8 Jan 9, 2024
0.0.7 Nov 13, 2023
0.0.1 Oct 9, 2023

#1265 in Procedural macros

MIT license

14KB
235 lines

DEPRECATED

speare_macro

This crate's sole purpose is to reduce the amount of boilerplate needed when working with the speare crate.

With it, we can write

pub struct Foo;

#[process]
impl Foo {
    #[handler]
    async fn bar(&mut self, msg: u64, ctx: &Ctx<Self>) -> Result<String, ()> {
        Ok(format!("{msg}"))
    }

    #[handler]
    async fn baz(&mut self, msg: String, ctx: &Ctx<Self>) -> Result<String, ()> {
        Ok(msg)
    }
}

instead of

pub struct Foo;

impl Process for Foo {
    type Error = ();
}

#[async_trait]
impl Handler<u64> for Foo {
    type Ok = String;
    type Err = ();

    async fn handle(&mut self, msg: u64, ctx: &Ctx<Self>) -> Result<String, ()> {
        Ok(format!("{msg}"))
    }
}

#[async_trait]
impl Handler<String> for Foo {
    type Ok = String;
    type Err = ();

    async fn handle(&mut self, msg: u64, ctx: &Ctx<Self>) -> Result<String, ()> {
        Ok(msg)
    }
}

Dependencies

~280–720KB
~17K SLoC