3 个版本
0.1.3 | 2021年10月7日 |
---|---|
0.1.2 | 2021年10月7日 |
0.1.0 | 2021年10月1日 |
#1540 in 文件系统
每月 24 次下载
在 gemla 中使用
13KB
94 行
File Linked - 控制直接与文件链接的对象
这个库提供了一组对象包装,并将数据绑定到文件。目前使用serde和bincode进行文件序列化和反序列化。
示例
use file_linked::*;
use serde::{Deserialize, Serialize};
use std::fmt;
use std::string::ToString;
use std::path::PathBuf;
#[derive(Deserialize, Serialize)]
struct Test {
pub a: u32,
pub b: String,
pub c: f64
}
let test = Test {
a: 1,
b: String::from("two"),
c: 3.0
};
let file_path = PathBuf::from("./file");
// Object is consumed and can only be interacted with through the FileLinked object
let mut linked_test = FileLinked::new(test, &file_path)?;
// You can obtain a readonly reference of the underlying data
assert_eq!(linked_test.readonly().b, String::from("two"));
// Whenever a mutable operation is performed, the changed data is rewritten to the file
linked_test.mutate(|x| x.a += 1)?;
assert_eq!(linked_test.readonly().a, 2);
drop(linked_test);
// You can also initialize an object from a file
let from_file = FileLinked::<Test>::from_file(&file_path)?;
assert_eq!(from_file.readonly().a, 2);
assert_eq!(from_file.readonly().b, String::from("two"));
assert_eq!(from_file.readonly().c, 3.0);
这个库仍在开发中,缺少一些功能,可能不够稳定
- 目前,在执行任何可变操作后,FileLinked对象将重写整个文件
- 尚未实现自定义序列化器的选择,目前使用的序列化器只是bincode
依赖关系
~0.7–1.4MB
~31K SLoC