#![allow(trivial_numeric_casts)]
extern crate grust;
use grust::enumeration;
use grust::enumeration::{IntrospectedEnum, UnknownValue};
use grust::types::gint;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
enum MyEnum {
Foo = 1,
Bar = 2,
}
impl IntrospectedEnum for MyEnum {
fn from_int(v: gint) -> Result<Self, UnknownValue> {
match v {
1 => Ok(MyEnum::Foo),
2 => Ok(MyEnum::Bar),
_ => Err(UnknownValue(v))
}
}
fn to_int(&self) -> gint {
*self as gint
}
fn name(&self) -> &'static str {
match *self {
MyEnum::Foo => "foo",
MyEnum::Bar => "bar"
}
}
}
#[test]
fn test_enum_from_int() {
let v: MyEnum = enumeration::from_int(1).unwrap();
assert_eq!(v, MyEnum::Foo);
let v: MyEnum = enumeration::from_int(2).unwrap();
assert_eq!(v, MyEnum::Bar);
}
#[test]
fn test_unknown_value() {
let res = enumeration::from_int::<MyEnum>(0);
assert_eq!(res.err().unwrap(), UnknownValue(0))
}