Macro wayland_client::event_enum [−][src]
macro_rules! event_enum {
($(#[$attrs : meta]) * $enu : ident | $($evt_name : ident => $iface : ty), *) => { ... };
($(#[$attrs : meta]) * $enu : ident | $($evt_name : ident => $iface : ty), * |
$($name : ident => $value : ty), *) => { ... };
}Expand description
Generate an enum joining several objects events
This macro allows you to easily create a enum type for use with your message Filters. It is used like so:
event_enum!(
MyEnum |
Pointer => WlPointer,
Keyboard => WlKeyboard,
Surface => WlSurface
);This will generate the following enum, unifying the events from each of the provided interface:
ⓘ
pub enum MyEnum {
Pointer { event: WlPointer::Event, object: Main<WlPointer> },
Keyboard { event: WlKeyboard::Event, object: Main<WlKeyboard> },
Surface { event: WlSurface::Event, object: Main<WlSurface> }
}It will also generate the appropriate From<_> implementation so that a Filter<MyEnum> can be
used as an implementation for WlPointer, WlKeyboard and WlSurface.
If you want to add custom messages to the enum, the macro also supports it:
event_enum!(
MyEnum |
Pointer => WlPointer,
Keyboard => WlKeyboard,
Surface => WlSurface |
MyMessage => SomeType,
OtherMessage => OtherType
);will generate the following enum:
ⓘ
pub enum MyEnum {
Pointer { event: WlPointer::Event, object: Main<WlPointer> },
Keyboard { event: WlKeyboard::Event, object: Main<WlKeyboard> },
Surface { event: WlSurface::Event, object: Main<WlSurface> },
MyMessage(SomeType),
OtherMessage(OtherType)
}as well as implementations of From<SomeType> and From<OtherType>, so that these types can
directly be provided into a Filter<MyEnum>.