flowey_core

Macro flowey_request

Source
macro_rules! flowey_request {
    (
        $(#[$root_a:meta])*
        pub enum_struct $req:ident {
            $($tt:tt)*
        }
    ) => { ... };
    (
        $(#[$a:meta])*
        pub enum $req:ident {
            $($tt:tt)*
        }
    ) => { ... };
    (
        $(#[$a:meta])*
        pub struct $req:ident {
            $($tt:tt)*
        }
    ) => { ... };
    (
        $(#[$a:meta])*
        pub struct $req:ident($($tt:tt)*);
    ) => { ... };
}
Expand description

Declare a new Request type for the current Node.

§struct and enum Requests

When wrapping a vanilla Rust struct and enum declaration, this macro simply derives Serialize, Deserialize, and IntoRequest for the type, and does nothing else.

§enum_struct Requests

This macro also supports a special kind of enum_struct derive, which allows declaring a Request enum where each variant is split off into its own separate (named) struct.

e.g:

flowey_request! {
    pub enum_struct Foo {
        Bar,
        Baz(pub usize),
        Qux(pub String),
    }
}

will be expanded into:

#[derive(Serialize, Deserialize)]
pub enum Foo {
   Bar(req::Bar),
   Baz(req::Baz),
   Qux(req::Qux),
}

pud mod req {
    #[derive(Serialize, Deserialize)]
    pub struct Bar;

    #[derive(Serialize, Deserialize)]
    pub struct Baz(pub usize);

    #[derive(Serialize, Deserialize)]
    pub struct Qux(pub String);
}