#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::ops::Not; #[derive(Debug, PartialEq)] enum Answer { Yes, No, } impl Not for Answer { type Output = Self; fn not(self) -> Self::Output { match self { Answer::Yes => Answer::No, Answer::No => Answer::Yes, } } } fn main() { assert_eq!(! Answer::Yes, Answer::No); assert_eq!(! Answer::No, Answer::Yes); }