Skip to main content

Toggle

Derive Macro Toggle 

Source
#[derive(Toggle)]
Expand description

Adds a toggled() method that maps each enum variant to the next unit variant.

ยงExample

#[derive(Debug, mkutils_macros::Toggle, PartialEq)]
enum MyEnum {
  Foo,
  Bar,
  Baz(String),
}

// adds

// impl MyEnum {
//   pub fn toggle(&self) -> Self {
//     match self {
//         Self::Foo => Self::Bar,
//         Self::Bar => Self::Foo,
//         Self::Baz(_string) => Self::Foo,
//     }
//   }
//
//   pub fn toggle(&mut self) -> &mut Self {
//     *self = self.toggled();
//
//     self
//   }
// }

// as can be seen in

std::assert_eq!(MyEnum::Foo.toggled(), MyEnum::Bar);
std::assert_eq!(MyEnum::Bar.toggled(), MyEnum::Foo);
std::assert_eq!(MyEnum::Baz(String::new()).toggled(), MyEnum::Foo);