戳人痛处

导航

[记]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

 

posted on 2022-11-07 19:06  戳人痛处  阅读(181)  评论(0编辑  收藏  举报