serde2file

serialize some data to a file or deserialize a data from a file support encrypt/decrypt file

将struct序列化化存储为文件,或者从文件反序列化为struct 文件存储时支持加密存储

示例 / Example

```ignore use serde::{Deserialize, Serialize}; use aesgcm::aead::{Aead, NewAead}; use aesgcm::{Aes256Gcm, Key, Nonce};

use serde2file::prelude::*;

[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, FileSerializeAndDeserialize)]

[file_encrypt(encrypt=TestEncryptTool::encrypt,decrypt=TestEncryptTool::decrypt)]

struct TestData { id: String, name: String, } /// a encryption and decryption tools /// /// 加密和解密工具

[allow(dead_code)]

struct TestEncryptTool;

/// some impl TestEncryptTool { pub fn getaeskeynonce() -> (String, String) { ( "*)#@140600!$=^20220208)leb*$xz".into(), "abc$hy%95599".into(), ) } pub fn encrypt(data: &str) -> DumpResult> { let (keystr, noncestr) = Self::getaeskeynonce(); let key = Key::fromslice(keystr.asbytes()); let cipher = Aes256Gcm::new(key); let nonce = Nonce::fromslice(noncestr.asbytes()); let cipherdata = cipher.encrypt(nonce, data.asbytes().asref()).unwrap(); Ok(cipherdata) } pub fn decrypt(data: Vec) -> DumpResult> { let (keystr, noncestr) = Self::getaeskeynonce(); let key = Key::fromslice(keystr.asbytes()); let cipher = Aes256Gcm::new(key); let nonce = Nonce::fromslice(noncestr.asbytes()); let plaindata = cipher.decrypt(nonce, data.asref()).unwrap(); Ok(plaindata) } }

cfg(test)

mod test { use super::*;

#[test]
fn test_serialize_file() {
    let data = TestData {
        id: "01".into(),
        name: "hy".into(),
    };
    data.dump_to_file("/tmp").unwrap();
}

#[test]
fn test_deserialize_file() {
    let data = TestData {
        id: "01".into(),
        name: "hy".into(),
    };
    println!("{}", std::any::type_name::<TestData>());
    let s_data = TestData::load_from_file("/tmp").unwrap();
    assert_eq!(data, s_data)
}

} ```