Macro osauth::protocol_enum

source ·
macro_rules! protocol_enum {
    {$(#[$attr:meta])* enum $name:ident: $carrier:ty {
        $($(#[$iattr:meta])* $item:ident = $val:expr),+
    }} => { ... };
    {$(#[$attr:meta])* enum $name:ident: $carrier:ty = $default:ident {
        $($(#[$iattr:meta])* $item:ident = $val:expr),+
    }} => { ... };
    {$(#[$attr:meta])* enum $name:ident {
        $($(#[$iattr:meta])* $item:ident = $val:expr),+
    }} => { ... };
    {$(#[$attr:meta])* enum $name:ident = $default:ident {
        $($(#[$iattr:meta])* $item:ident = $val:expr),+
    }} => { ... };
    {$(#[$attr:meta])* __private $name:ident: $carrier:ty {
        $($(#[$iattr:meta])* $item:ident = $val:expr),+
    }} => { ... };
}
Expand description

A macro for defining serializable and deserializable protocol enums.

Clone, Copy, Debug, Serialize/Deserialize and equality traits are automatically derived.

The easiest variant assumes that the carrier type is a string:

osauth::protocol_enum! {
    #[doc = "Possible image statuses."]
    enum ImageStatus {
        Queued = "queued",
        Saving = "saving",
        Active = "active",
        Killed = "killed",
        Deleted = "deleted",
        Deactivated = "deactivated"
    }
}

The second variant assumes a non-string carrier type, which must be (de-)serializable:

osauth::protocol_enum! {
    #[doc = "Possible power states."]
    enum ServerPowerState: u8 {
        NoState = 0,
        Running = 1,
        Paused = 3,
        Shutdown = 4,
        Crashed = 6,
        Suspended = 7
    }
}

These two variants produce a failure when an unknown value is deserialized. If you expect the underlying enumeration to be extended in the future, provide a default value:

osauth::protocol_enum! {
    #[doc = "Possible image statuses."]
    #[non_exhaustive]
    enum ImageStatus = Unknown {
        Queued = "queued",
        Saving = "saving",
        Active = "active",
        Killed = "killed",
        Deleted = "deleted",
        Deactivated = "deactivated",
        Unknown = "unknown"
    }
}

osauth::protocol_enum! {
    #[doc = "Possible power states."]
    #[non_exhaustive]
    enum ServerPowerState: u8 = NoState {
        NoState = 0,
        Running = 1,
        Paused = 3,
        Shutdown = 4,
        Crashed = 6,
        Suspended = 7
    }
}