use jsony::Jsony;
#[derive(Jsony, Debug, PartialEq)]
#[jsony(FromJson, ToJson, FromBinary, ToBinary)]
struct C<const N: usize> {
a: u32,
}
#[test]
fn const_generic_unused_in_fields() {
let original: C<3> = C { a: 42 };
let s = jsony::to_json(&original);
let back: C<3> = jsony::from_json(&s).unwrap();
assert_eq!(original, back);
let bytes = jsony::to_binary(&original);
let back: C<3> = jsony::from_binary(&bytes).unwrap();
assert_eq!(original, back);
}
#[derive(Jsony, Debug, PartialEq)]
#[jsony(FromJson, ToJson, FromBinary, ToBinary)]
struct Holder<const N: usize> {
items: [u32; N],
}
#[test]
fn const_generic_in_field() {
let original: Holder<3> = Holder { items: [1, 2, 3] };
let s = jsony::to_json(&original);
assert_eq!(s, r#"{"items":[1,2,3]}"#);
let back: Holder<3> = jsony::from_json(&s).unwrap();
assert_eq!(original, back);
let bytes = jsony::to_binary(&original);
let back: Holder<3> = jsony::from_binary(&bytes).unwrap();
assert_eq!(original, back);
}
#[derive(Jsony, Debug, PartialEq)]
#[jsony(FromJson, ToJson)]
struct Mixed<'a, T, const N: usize> {
t: T,
s: &'a str,
arr: [u32; N],
}
#[test]
fn const_generic_mixed_with_lifetime_and_type() {
let original: Mixed<i32, 2> = Mixed {
t: 7,
s: "hi",
arr: [10, 20],
};
let s = jsony::to_json(&original);
let back: Mixed<i32, 2> = jsony::from_json(&s).unwrap();
assert_eq!(original, back);
}
#[derive(Jsony, Debug, PartialEq)]
#[jsony(Json)]
enum CGE<const N: usize> {
V { a: [u32; N] },
Unit,
}
#[test]
fn const_generic_enum_struct_variant() {
for original in [CGE::V { a: [1u32, 2, 3] }, CGE::Unit] {
let s = jsony::to_json(&original);
let back: CGE<3> = jsony::from_json(&s).unwrap();
assert_eq!(original, back);
}
}
#[derive(Jsony, Debug, PartialEq)]
#[jsony(Json)]
struct WithDefault<const N: usize = 4> {
a: u32,
}
#[test]
fn const_generic_with_default() {
let original: WithDefault = WithDefault { a: 1 };
let s = jsony::to_json(&original);
let back: WithDefault = jsony::from_json(&s).unwrap();
assert_eq!(original, back);
let explicit: WithDefault<8> = WithDefault { a: 2 };
let s = jsony::to_json(&explicit);
let back: WithDefault<8> = jsony::from_json(&s).unwrap();
assert_eq!(explicit, back);
}