add default variant
This commit is contained in:
parent
ae1c3e20ac
commit
7557022900
2 changed files with 240 additions and 21 deletions
|
|
@ -880,4 +880,85 @@ mod test {
|
|||
vec![0x42, 0, 1, 2, 3, 0x66, 0x66]
|
||||
);
|
||||
}
|
||||
|
||||
#[derive(Serializable, PartialEq, Eq, Debug)]
|
||||
#[prefix_type(u8)]
|
||||
enum TestEnumUnnamedDef {
|
||||
#[prefix(0)]
|
||||
Zero,
|
||||
#[prefix(1)]
|
||||
One(u32),
|
||||
#[prefix(2)]
|
||||
Two { a: u16, b: u32 },
|
||||
#[default_variant]
|
||||
Dft(u8, u32),
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn size_enum_unnamed_def() {
|
||||
assert_eq!(TestEnumUnnamedDef::Zero.size(), 1);
|
||||
assert_eq!(TestEnumUnnamedDef::One(42).size(), 5);
|
||||
assert_eq!(TestEnumUnnamedDef::Two { a: 1, b: 2 }.size(), 7);
|
||||
assert_eq!(TestEnumUnnamedDef::Dft(42, 0x01234567).size(), 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn serialize_enum_unnamed_def() {
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::Zero.serialize_to_vec().unwrap(),
|
||||
vec![0u8]
|
||||
);
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::One(42).serialize_to_vec().unwrap(),
|
||||
vec![1u8, 0u8, 0u8, 0u8, 42u8]
|
||||
);
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::Two { a: 1, b: 2 }
|
||||
.serialize_to_vec()
|
||||
.unwrap(),
|
||||
vec![2u8, 0u8, 1u8, 0u8, 0u8, 0u8, 2u8]
|
||||
);
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::Dft(42, 0x01234567)
|
||||
.serialize_to_vec()
|
||||
.unwrap(),
|
||||
vec![42u8, 0x01u8, 0x23u8, 0x45, 0x67],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize_enum_unnamed_def() {
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::deserialize_from_slice(&[0u8]).unwrap(),
|
||||
TestEnumUnnamedDef::Zero
|
||||
);
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::deserialize_from_slice(&[1u8, 0u8, 0u8, 0u8, 42u8]).unwrap(),
|
||||
TestEnumUnnamedDef::One(42)
|
||||
);
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::deserialize_from_slice(&[2u8, 0u8, 1u8, 0u8, 0u8, 0u8, 2u8])
|
||||
.unwrap(),
|
||||
TestEnumUnnamedDef::Two { a: 1, b: 2 }
|
||||
);
|
||||
assert_eq!(
|
||||
TestEnumUnnamedDef::deserialize_from_slice(&[42u8, 0x01u8, 0x23u8, 0x45, 0x67])
|
||||
.unwrap(),
|
||||
TestEnumUnnamedDef::Dft(42, 0x01234567)
|
||||
);
|
||||
}
|
||||
|
||||
#[derive(Serializable, PartialEq, Eq, Debug)]
|
||||
#[prefix_type(u8)]
|
||||
enum TestEnumNamedDef {
|
||||
#[default_variant]
|
||||
Dft { prefix: u8 },
|
||||
}
|
||||
// Must panic: TODO: test that, somehow
|
||||
// #[derive(Serializable, PartialEq, Eq, Debug)]
|
||||
// #[prefix_type(u8)]
|
||||
// enum TestInvalidEnumNamedDef {
|
||||
// #[default_variant]
|
||||
// Dft { plop: u32, prefix: u8 },
|
||||
// }
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue