toml cbor_tree = "0.11" serde = { version = "1.0", features = ["derive"] } rust use cbor_tree::{Cborize, DeserializeTrait, TokenBuilder}; #[derive(Debug)] struct UserInfo { username: String, age: u8, } impl Cborize for UserInfo { fn to_cbor(&self) -> Vec<u8> { let mut builder = TokenBuilder::new(); builder .add_text_string(self.username.clone()) .unwrap() .add_unsigned_integer(self.age as u64) .unwrap(); builder.build().unwrap().to_cbor() } } impl DeserializeTrait for UserInfo { fn from_cbor_value(value: cbor_tree::SimpleValue) -> Result<UserInfo, ()> { match value { cbor_tree::SimpleValue::List(list) => { if list.len() == 2 { let username = match &list[0] { cbor_tree::SimpleValue::TextString(name) => name.clone(), _ => return Err(()), }; let age = match &list[1] { cbor_tree::SimpleValue::UnsignedInteger(age) => *age as u8, _ => return Err(()), }; Ok(UserInfo { username, age }) } else { Err(()) } }, _ => Err(()) } } } rust fn main() { let user = UserInfo { username: String::from("Alice"), age: 25, }; let serialized = user.to_cbor(); println!("Serialized CBOR: {:?}", serialized); let deserialized = match cbor_tree::from_slice(&serialized) { Ok(value) => UserInfo::from_cbor_value(value), Err(_) => Err(()), }; match deserialized { Ok(user) => println!("Deserialized User: {:?}", user), Err(_) => println!("Deserialization failed!"), } }


上一篇:
下一篇:
切换中文