2 个版本

0.0.2 2024 年 4 月 11 日
0.0.1 2024 年 4 月 6 日

729文件系统

MIT 许可证

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