use super::schema::SchemaVersion;
use super::wire::WireVersion;
pub trait VersionedEvent {
fn wire_version(&self) -> WireVersion;
fn schema_version(&self) -> Option<(&'static str, SchemaVersion)> {
None
}
}
#[cfg(test)]
mod tests {
use super::*;
#[derive(Debug)]
struct ExampleEvent {
wire: WireVersion,
schema: Option<(&'static str, SchemaVersion)>,
}
impl VersionedEvent for ExampleEvent {
fn wire_version(&self) -> WireVersion {
self.wire
}
fn schema_version(&self) -> Option<(&'static str, SchemaVersion)> {
self.schema
}
}
#[test]
fn trait_is_implementable() {
let e = ExampleEvent {
wire: WireVersion::new(1, 0),
schema: Some(("memory_commit_log", SchemaVersion::new(1))),
};
assert_eq!(e.wire_version(), WireVersion::new(1, 0));
assert_eq!(
e.schema_version(),
Some(("memory_commit_log", SchemaVersion::new(1)))
);
}
#[test]
fn schema_version_default_is_none() {
struct NoSchema;
impl VersionedEvent for NoSchema {
fn wire_version(&self) -> WireVersion {
WireVersion::new(1, 0)
}
}
let e = NoSchema;
assert_eq!(e.schema_version(), None);
}
}