Plain data in Rust can be surprisingly verbose. I thought I wanted: enum Action { Changed, Unchanged } but it turned out I wanted this instead: #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] enum Action { Changed, Unchanged }