1 个不稳定版本
0.1.0 | 2024年7月1日 |
---|
#435 在 进程宏 中
每月下载量 151
15KB
217 行
MD-Models 宏
此宏可以将使用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