use midiserde::{json, Deserialize, Serialize};
#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct WithRename {
#[mini(rename = "displayName")]
display_name: String,
#[mini(rename = "inner_count")]
count: u32,
}
#[derive(Debug, PartialEq, Deserialize, Serialize)]
enum Tag {
A,
#[mini(rename = "renamedB")]
B,
}
#[test]
fn struct_rename() {
let j = r#"{"displayName": "foo", "inner_count": 99}"#;
let v: WithRename = json::from_str(j).unwrap();
assert_eq!(v.display_name, "foo");
assert_eq!(v.count, 99);
let back = json::to_string(&v);
assert!(back.contains(r#""displayName":"foo""#));
assert!(back.contains(r#""inner_count":99"#));
}
#[test]
fn enum_rename() {
let b: Tag = json::from_str(r#""renamedB""#).unwrap();
assert!(matches!(b, Tag::B));
let j = json::to_string(&Tag::B);
assert_eq!(j, r#""renamedB""#);
}
#[cfg(feature = "base64")]
#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct WithBase64AndRename {
name: String,
#[mini(with = "midiserde::with::base64", rename = "data")]
payload: Vec<u8>,
}
#[cfg(feature = "base64")]
#[test]
fn with_rename_deserialize() {
let j = r#"{"name": "test", "data": "SGVsbG8="}"#;
let v: WithBase64AndRename = json::from_str(j).unwrap();
assert_eq!(v.name, "test");
assert_eq!(v.payload, b"Hello");
}
#[cfg(feature = "base64")]
#[test]
fn with_rename_serialize() {
let v = WithBase64AndRename {
name: "test".into(),
payload: b"Hi".to_vec(),
};
let j = json::to_string(&v);
assert!(j.contains(r#""data":"SGk=""#)); assert!(j.contains(r#""name":"test""#));
}
#[test]
fn enum_unknown_variant() {
let result: Result<Tag, _> = json::from_str(r#""unknownVariant""#);
assert!(result.is_err());
}