add default variant

This commit is contained in:
Jean-Marie Mineau 2023-08-28 15:02:48 +02:00
parent ae1c3e20ac
commit 7557022900
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
2 changed files with 240 additions and 21 deletions

View file

@ -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 },
// }
}