use crate::Change;
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[repr(u8)]
pub enum ChangeKind {
NodeCreated = 0,
NodeUpdated = 1,
NodeDeleted = 2,
EdgeCreated = 3,
EdgeUpdated = 4,
EdgeDeleted = 5,
SchemaChanged = 6,
NodePropertyRemoved = 7,
EdgePropertyRemoved = 8,
NodeLabelRemoved = 9,
NodesOfTypeTruncated = 10,
EdgesOfTypeTruncated = 11,
GraphReset = 12,
}
impl Change {
#[must_use]
pub const fn kind(&self) -> ChangeKind {
match self {
Self::NodeCreated { .. } => ChangeKind::NodeCreated,
Self::NodeUpdated { .. } => ChangeKind::NodeUpdated,
Self::NodeDeleted { .. } => ChangeKind::NodeDeleted,
Self::EdgeCreated { .. } => ChangeKind::EdgeCreated,
Self::EdgeUpdated { .. } => ChangeKind::EdgeUpdated,
Self::EdgeDeleted { .. } => ChangeKind::EdgeDeleted,
Self::SchemaChanged { .. } => ChangeKind::SchemaChanged,
Self::NodePropertyRemoved { .. } => ChangeKind::NodePropertyRemoved,
Self::EdgePropertyRemoved { .. } => ChangeKind::EdgePropertyRemoved,
Self::NodeLabelRemoved { .. } => ChangeKind::NodeLabelRemoved,
Self::NodesOfTypeTruncated { .. } => ChangeKind::NodesOfTypeTruncated,
Self::EdgesOfTypeTruncated { .. } => ChangeKind::EdgesOfTypeTruncated,
Self::GraphReset {} => ChangeKind::GraphReset,
}
}
}
#[cfg(test)]
mod tests {
use super::ChangeKind;
use crate::Change;
#[test]
fn change_kind_maps_every_change_variant() {
let expected = [
ChangeKind::NodeCreated,
ChangeKind::NodeUpdated,
ChangeKind::NodeDeleted,
ChangeKind::EdgeCreated,
ChangeKind::EdgeUpdated,
ChangeKind::EdgeDeleted,
ChangeKind::SchemaChanged,
ChangeKind::NodePropertyRemoved,
ChangeKind::EdgePropertyRemoved,
ChangeKind::NodeLabelRemoved,
ChangeKind::NodesOfTypeTruncated,
ChangeKind::EdgesOfTypeTruncated,
ChangeKind::GraphReset,
];
assert_eq!(Change::VARIANT_COUNT, expected.len());
for (factory, kind) in Change::ALL.iter().zip(expected) {
assert_eq!(factory().kind(), kind);
}
}
#[test]
fn change_kind_discriminants_are_contiguous_and_stable() {
assert_eq!(ChangeKind::NodeCreated as u8, 0);
assert_eq!(ChangeKind::NodePropertyRemoved as u8, 7);
assert_eq!(ChangeKind::GraphReset as u8, 12);
}
}