[记]Rust toml序列与反序列化
依赖:
serde = { version = "1", features = ["derive"] } # You only need this if you want app persistence
toml = "0.5.9"
结构体:两个->
use serde::{Deserialize,Serialize}; #[derive(Deserialize,Serialize)] #[derive(Default)] pub struct AtCmdVec{ decrib:String, data:Vec<AtCmd> } #[derive(Deserialize,Serialize)] #[derive(Default)] pub struct AtCmd{ hex:bool, strs:String, btntext:String, iidx:usize, dealy:usize, }
测试代码部分:
mod test { use std::io::Read; use std::io::Write; use crate::AtCmdVec; use crate::AtCmd; #[test] fn write_to_file() { let ss = AtCmdVec{decrib:"22".to_string(), data:vec![AtCmd{hex:true,strs:"at".to_string(),btntext:"sss".to_string(),iidx:0,dealy:0} ,AtCmd{hex:true,strs:"at".to_string(),btntext:"sss".to_string(),iidx:1,dealy:0}]}; if let Ok(s)=toml::to_string(&ss){ println!("{}",s); if let Ok(mut file)=std::fs::File::create("tt.toml"){ file.write(s.as_bytes()).unwrap(); } } } #[test] fn read_from_file(){ if let Ok(mut file) = std::fs::File::open("tt.toml"){ let mut msg = String::new(); file.read_to_string(&mut msg).unwrap(); let ss:AtCmdVec =toml::from_str(&msg).unwrap(); println!("{:?}",ss.decrib); } } }
输出
1
running 1 test decrib = "22" [[data]] hex = true strs = "at" btntext = "sss" iidx = 0 dealy = 0 [[data]] hex = true strs = "at" btntext = "sss" iidx = 1 dealy = 0 test test::write_to_file ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.01s
2
running 1 test "22" test test::read_from_file ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s
-------------====================分割线====================-------------