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
}
}