#![doc = "Tests for Serde serialization and deserialization of `MagicTypeId`."]
#![cfg(feature = "serde")]
use mti::prelude::*;
use std::str::FromStr;
#[test]
fn test_serialize_deserialize_with_prefix() {
let prefix = TypeIdPrefix::from_str("user").unwrap();
let suffix = TypeIdSuffix::new::<Nil>(); let magic_id = MagicTypeId::new(prefix, suffix);
let json = serde_json::to_string(&magic_id).unwrap();
assert_eq!(json, "\"user_00000000000000000000000000\"");
let deserialized: MagicTypeId = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized, magic_id);
assert_eq!(deserialized.prefix().as_str(), "user");
assert_eq!(
deserialized.suffix().to_string(),
"00000000000000000000000000"
);
}
#[test]
fn test_serialize_deserialize_without_prefix() {
let prefix = TypeIdPrefix::default();
let suffix = TypeIdSuffix::new::<Nil>(); let magic_id = MagicTypeId::new(prefix, suffix);
let json = serde_json::to_string(&magic_id).unwrap();
assert_eq!(json, "\"00000000000000000000000000\"");
let deserialized: MagicTypeId = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized, magic_id);
assert!(deserialized.prefix().as_str().is_empty());
assert_eq!(
deserialized.suffix().to_string(),
"00000000000000000000000000"
);
}
#[test]
fn test_deserialize_invalid_format() {
let result: Result<MagicTypeId, _> =
serde_json::from_str("\"invalid!_00000000000000000000000000\"");
assert!(result.is_err());
}
#[test]
fn test_in_complex_structure() {
#[derive(serde::Serialize, serde::Deserialize, Debug, PartialEq)]
struct User {
id: MagicTypeId,
name: String,
}
let user = User {
id: MagicTypeId::from_str("user_00000000000000000000000000").unwrap(),
name: "John Doe".to_string(),
};
let json = serde_json::to_string(&user).unwrap();
let deserialized: User = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized, user);
assert_eq!(deserialized.id.prefix().as_str(), "user");
assert_eq!(
deserialized.id.suffix().to_string(),
"00000000000000000000000000"
);
}