63 lines
1.6 KiB
Rust
63 lines
1.6 KiB
Rust
use caret::{caret_enum, Error};
|
|
use std::convert::TryInto;
|
|
|
|
caret_enum! {
|
|
#[derive(Debug)]
|
|
enum Demo as u16 {
|
|
A = 8,
|
|
B ("TheLetterB") = 10,
|
|
C,
|
|
Dee = 999,
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_int_ops() {
|
|
assert_eq!(Demo::A.to_int(), 8u16);
|
|
assert_eq!(Demo::B.to_int(), 10);
|
|
assert_eq!(Demo::C.to_int(), 11);
|
|
assert_eq!(Demo::Dee.to_int(), 999);
|
|
|
|
let t: u16 = Demo::A.into();
|
|
assert_eq!(t, 8);
|
|
|
|
let t: Demo = 999.try_into().unwrap();
|
|
assert_eq!(t, Demo::Dee);
|
|
assert_eq!(Demo::from_int(11), Some(Demo::C));
|
|
|
|
assert_eq!(Demo::from_int(2), None);
|
|
let t: Result<Demo, _> = 6.try_into();
|
|
assert!(t.is_err());
|
|
let err = t.unwrap_err();
|
|
assert_eq!(err, Error::InvalidInteger);
|
|
assert_eq!(
|
|
format!("{}", err),
|
|
"Integer was not member of this enumeration"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_str_ops() {
|
|
assert_eq!(Demo::A.to_str(), "A");
|
|
assert_eq!(Demo::B.to_str(), "TheLetterB");
|
|
let t: &str = Demo::C.into();
|
|
assert_eq!(t, "C");
|
|
assert_eq!(format!("Hello {}", Demo::Dee), "Hello Dee");
|
|
assert_eq!(format!("Hello {:?}", Demo::Dee), "Hello Dee");
|
|
|
|
let t: Demo = "TheLetterB".parse().unwrap();
|
|
assert_eq!(t, Demo::B);
|
|
let t: Result<Demo, _> = "XYZ".parse();
|
|
assert!(t.is_err());
|
|
let t: Demo = "Dee".parse().unwrap();
|
|
assert_eq!(t, Demo::Dee);
|
|
let t: Result<Demo, _> = "Foo".parse();
|
|
assert!(t.is_err());
|
|
let err = t.unwrap_err();
|
|
assert_eq!(err, Error::InvalidString);
|
|
assert_eq!(
|
|
format!("{}", err),
|
|
"String was not member of this enumeration"
|
|
);
|
|
}
|