#markdown #model #data-model #macro #generate #enums #name

mdmodels-macro

一个用于从Markdown数据模型生成模型的进程宏

1 个不稳定版本

0.1.0 2024年7月1日

#435进程宏

Download history 151/week @ 2024-07-01

每月下载量 151

MIT 许可证

15KB
217

MD-Models 宏

Build Status

此宏可以将使用MD-Models转换的Markdown模型转换为Rust结构体和枚举。生成的Rust代码可以用于序列化和反序列化模型并将其集成到你的Rust项目中。

安装

cargo install mdmodels-macro

示例

假设你有一个包含以下内容的Markdown文件 model.md

# Test

### Object

- string_value
  - Type: string
- enum_value
  - Type: SomeEnum

### SomeEnum

```python
VALUE = value
ANOTHER = another
```

你可以使用以下命令将此Markdown文件转换为Rust代码

use mdmodels_macro::parse_mdmodel;

parse_mdmodel!("tests/data/model.md");

此时,宏将生成相应的结构体和枚举,这些将在Rust代码中以模块的形式提供。如果存在标题(# Test),模块名称将从蛇形表示法派生。否则,模块名称将是 model

然后你可以在代码中使用该模块

非构建模式

fn main () {
    let obj = test::Object {
        string_value: "Hello, World!".to_string(),
        enum_value: model::SomeEnum::VALUE,
    };

    // Serialize the object
    let serialized = serde_json::to_string(&obj).unwrap();

    println!("Serialized: \n{}\n", serialized);

    // Deserialize the object
    let deserialized: test::Object = serde_json::from_str(&serialized).unwrap();

    println!("Deserialized: \n{:#?}\n", deserialized);
}

构建模式

此宏还支持构建模式。要使用构建模式,你需要使用Markdown文件中对象的 Builder 结构体。

fn main () -> Result<(), Box<dyn std::error::Error>> {
    let obj = test::ObjectBuilder::new()
        .string_value("Hello, World!")
        .enum_value(model::SomeEnum::VALUE)
        .build()?;

    // Serialize the object
    let serialized = serde_json::to_string(&obj).unwrap();

    println!("Serialized: \n{}\n", serialized);

    // Deserialize the object
    let deserialized: test::Object = serde_json::from_str(&serialized).unwrap();

    println!("Deserialized: \n{:#?}\n", deserialized);

    Ok(())
}

依赖关系

~14–27MB
~409K SLoC