eventmill-derive
[![Build Status]][actions]
Derive macros for convenient use of the eventmill
crate
[dependencies]
eventmill_derive = "0.1"
#[derive(EventType)]
The #[derive(EventType)]
macro implements the EventType
trait for your events. An Event can be
a struct
or enum
. We can configure the generated implementation by using the optional attributes
event_type
, event_type_version
and event_source
.
Implementing an event using a struct
and specifying all available attributes.
#[derive(EventType, Debug)]
#[event_type_version("V2")]
#[event_source("https://github.com/innoave/eventmill/examples/turtle")]
pub struct TurtleTurned {
angle: f32,
}
fn main() {
use eventmill::EventType;
let turtle = TurtleTurned { angle: 0.42 };
assert_eq!(turtle.event_type_version(), "V2");
assert_eq!(
turtle.event_source(),
"https://github.com/innoave/eventmill/examples/turtle"
);
assert_eq!(turtle.event_type(), "TurtleTurned");
}
Implementing an event using an enum
and specifying all available attributes.
#[derive(EventType, Debug)]
#[event_type_version("V2")]
#[event_source("https://github.com/innoave/eventmill/examples/turtle")]
pub enum Turtle {
#[event_type("turtle-turned")]
Turned(f32),
#[event_type("turtle-moved")]
Moved { x: i32, y: i32 },
#[event_type("turtle-stopped")]
Stopped,
}
fn main() {
use eventmill::EventType;
let turtle = Turtle::Stopped;
assert_eq!(turtle.event_type_version(), "V2");
assert_eq!(
turtle.event_source(),
"https://github.com/innoave/eventmill/examples/turtle"
);
assert_eq!(turtle.event_type(), "turtle-stopped");
let turtle = Turtle::Turned(0.42);
assert_eq!(turtle.event_type(), "turtle-turned");
let turtle = Turtle::Moved { x: 4, y: 2 };
assert_eq!(turtle.event_type(), "turtle-moved");
}
If we omit any or all of the attributes the macro uses default values. Note the default names
returned by the event_type()
function.
#[derive(eventmill_derive::EventType, Debug)]
pub enum Turtle {
Turned(f32),
Moved { x: i32, y: i32 },
Stopped,
}
fn main() {
use eventmill::EventType;
assert_eq!(turtle.event_type_version(), "V0");
assert_eq!(turtle.event_source(), "");
let turtle = Turtle::Turned(0.42);
assert_eq!(turtle.event_type(), "Turtle::Turned");
let turtle = Turtle::Moved { x: 4, y: 2 };
assert_eq!(turtle.event_type(), "Turtle::Moved");
let turtle = Turtle::Stopped;
assert_eq!(turtle.event_type(), "Turtle::Stopped");
}