pan*_*ive 1 macros struct rust
我正在使用结构体来构建数据库的模式,所以我需要结构体的元信息。
\n假设我的架构结构定义如下:
\n#[derive(ParseStruct)]\npub struct User {\n\n #[field_attr( unique = true, default = "", index=["@hash", "@count"] )]\n pub name: String,\n\n #[field_attr( unique = true, default = "" )]\n pub username: String,\n\n pub description: Option<String>,\n pub age: u32\n}\nRun Code Online (Sandbox Code Playgroud)\n我想解析为以下结构:
\npub struct Schema<T>{\n name: String, // the struct name\n origin: T, // the struct to be parse, like the User struct above.\n fields: Vec<Field>, // the struct\'s fields\n}\n\npub struct Field {\n field_name: String,\n field_type: String,\n field_attrs: FieldAttribute\n}\n\npub struct FieldAttribute {\n unique: bool,\n default: String,\n index: Vec<String> // Index of the database\n}\nRun Code Online (Sandbox Code Playgroud)\n我写了一个开头,但我不知道如何继续写:
\n#[derive(ParseStruct)]\npub struct User {\n\n #[field_attr( unique = true, default = "", index=["@hash", "@count"] )]\n pub name: String,\n\n #[field_attr( unique = true, default = "" )]\n pub username: String,\n\n pub description: Option<String>,\n pub age: u32\n}\nRun Code Online (Sandbox Code Playgroud)\n预期结果:
\npub struct Schema<T>{\n name: String, // the struct name\n origin: T, // the struct to be parse, like the User struct above.\n fields: Vec<Field>, // the struct\'s fields\n}\n\npub struct Field {\n field_name: String,\n field_type: String,\n field_attrs: FieldAttribute\n}\n\npub struct FieldAttribute {\n unique: bool,\n default: String,\n index: Vec<String> // Index of the database\n}\nRun Code Online (Sandbox Code Playgroud)\n我不知道如何实现它。
\n我最近才开始学习derive宏,还没有完全掌握。在互联网上很难找到有关派生宏的有用教程。
\n请帮助我,谢谢。
\n使用 proc_macro_derive(过程宏)
src/main.rs:
use print_struct_trait::PrintStruct;
#[derive(PrintStruct)]
struct Point {
name: String,
x: i32,
y: i32,
}
fn main() {
let point = Point {
name: "origin".to_string(),
x: 2,
y: 3,
};
point.print();
}
Run Code Online (Sandbox Code Playgroud)
输出:
key=name, value=origin, type=String
key=x, value=2, type=i32
key=y, value=3, type=i32
Run Code Online (Sandbox Code Playgroud)
print_struct_derive/src/lib.rs:
key=name, value=origin, type=String
key=x, value=2, type=i32
key=y, value=3, type=i32
Run Code Online (Sandbox Code Playgroud)
PrintStruct 的github上的源代码
参考:
| 归档时间: |
|
| 查看次数: |
2740 次 |
| 最近记录: |