2 个版本
0.0.2 | 2024 年 4 月 11 日 |
---|---|
0.0.1 | 2024 年 4 月 6 日 |
729 在 文件系统
14KB
263 行
Stapifaction
Stapifaction 是一个 Rust 库,允许通过仅用 #[derive]
属性装饰现有的结构体来轻松生成静态 API。它作为 Serde 的超集,用于定义结构体如何在磁盘上持久化。
特性
使用示例
use serde::Serialize;
use stapifaction::{Persist, ToJson};
#[derive(Serialize, Persist)]
#[persist(path = "products")]
struct Product {
#[persist(id)]
pub id: u64,
pub label: String,
pub price: u64,
#[persist(expand = "all")]
#[serde(skip)]
pub orders: Vec<Order>,
}
#[derive(Serialize, Persist)]
struct Order {
#[persist(id)]
pub id: String,
pub quantity: u64,
}
fn main() {
let product = Product {
id: 1,
label: String::from("Phone"),
price: 600,
orders: vec![
Order {
id: String::from("ZGFS"),
quantity: 5,
},
Order {
id: String::from("OJGD"),
quantity: 10,
},
],
};
product.to_json("./");
}
上面的代码将生成以下文件
./products/1/data.json
./products/1/orders/ZGFS.json
./products/1/orders/OJGD.json
如你所见,#[derive]
属性用于控制文件的创建方式
- #[persist(id)] 用于指定文件名,
- #[persist(expand)] 允许将对应字段提取到另一个文件中,或者当在
Vec
上使用#[persist(expand = "")]
时,可以提取到多个文件。
依赖
~0.4–1MB
~20K SLoC