use musli::{Decode, Encode};
#[derive(Debug, PartialEq, Encode, Decode)]
#[musli(name_all = "name")]
enum EmptyVariants {
Empty,
Tuple(),
Struct {},
}
#[test]
fn enum_with_empty_variant() {
musli::macros::assert_roundtrip_eq!(full, EmptyVariants::Empty, json = r#"{"Empty":{}}"#);
musli::macros::assert_roundtrip_eq!(full, EmptyVariants::Tuple(), json = r#"{"Tuple":{}}"#);
musli::macros::assert_roundtrip_eq!(full, EmptyVariants::Struct {}, json = r#"{"Struct":{}}"#);
}
#[derive(Debug, PartialEq, Eq, Encode, Decode)]
#[musli(name_all = "name")]
enum NamedVariants {
#[musli(name_all = "index")]
Variant1 { field: u32 },
#[musli(name_all = "index")]
Variant2 { field: u32 },
}
#[test]
fn multiple_named_variants() {
musli::macros::assert_roundtrip_eq!(
full,
NamedVariants::Variant1 { field: 1 },
json = r#"{"Variant1":{"0":1}}"#
);
musli::macros::assert_roundtrip_eq!(
full,
NamedVariants::Variant2 { field: 2 },
json = r#"{"Variant2":{"0":2}}"#
);
}
#[derive(Debug, PartialEq, Encode, Decode)]
pub enum UntaggedVariants {
#[musli(packed)]
Empty,
#[musli(packed)]
Tuple(u32, u32),
#[musli(packed)]
Struct { a: u32, b: u32 },
}
#[test]
fn untagged_variants() {
musli::macros::assert_roundtrip_eq!(full, UntaggedVariants::Empty, json = r#"{"Empty":[]}"#);
musli::macros::assert_roundtrip_eq!(
full,
UntaggedVariants::Tuple(42, 84),
json = r#"{"Tuple":[42,84]}"#
);
musli::macros::assert_roundtrip_eq!(
full,
UntaggedVariants::Struct { a: 42, b: 84 },
json = r#"{"Struct":[42,84]}"#
);
}
#[derive(Debug, Clone, PartialEq, Encode, Decode)]
enum UntaggedSingleFields {
#[musli(packed)]
Variant1(String),
#[musli(packed)]
Variant2(f64),
#[musli(packed)]
Variant3(u64),
}
#[test]
fn untagged_single_field_variant() {
musli::macros::assert_roundtrip_eq!(
full,
UntaggedSingleFields::Variant1(String::from("hello"))
);
musli::macros::assert_roundtrip_eq!(full, UntaggedSingleFields::Variant2(1.0));
musli::macros::assert_roundtrip_eq!(full, UntaggedSingleFields::Variant3(42));
}