Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. #[derive(Debug)]
  2. enum TestEnum {
  3. Empty,
  4. Single(isize),
  5. Pair(isize, char),
  6. Struct{first: char, second: char},
  7. }
  8.  
  9. macro_rules! assert_variant {
  10. ($value:expr, $pattern:pat) => ({
  11. let value = &$value;
  12.  
  13. if let $pattern = value {} else {
  14. panic!(r#"assertion failed (value doesn't match pattern):
  15. value: `{:?}`,
  16. pattern: `{}`"#, value, stringify!($pattern))
  17. }
  18. })
  19.  
  20. // TODO: Additional patterns for trailing args, like assert and assert_eq
  21. }
  22.  
  23. fn main() {
  24. let value = TestEnum::Pair(10, 'a');
  25.  
  26. assert_variant!(value, TestEnum::Pair(..));
  27. assert_variant!(value, TestEnum::Pair(10, _));
  28.  
  29. // This one fails
  30. assert_variant!(value, TestEnum::Struct{..});
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement