2 个版本
0.1.1 | 2022 年 3 月 13 日 |
---|---|
0.1.0 | 2021 年 12 月 26 日 |
#1876 在 过程宏
39KB
83 行
一个用于提取 #[repr(C)] pub struct
结构体的库
为了暴露具有稳定 ABI 的结构体以与其他编程语言互操作,Rust 开发者应使用 #[repr(C)]
属性。
#[repr(C)]
pub struct Great {
}
你可以在这里了解更多:这里
此库允许执行由 syn 驱动的解析,以获取这些 repr-c-pub-structs 的位置信息。
示例
src/main.rs
use repr_c_pub_struct::parse_for_repr_c_pub_structs;
fn main() {
let crate_root = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let repr_c_structs = parse_for_repr_c_pub_structs(crate_root.as_str());
println!("{:#?}", repr_c_structs);
}
src/unused.rs
#[repr(C)]
pub struct Unused {
// Test
}
Windows 上的输出
[
ParsedFile {
path: "...\\repr_c_pub_struct\\src\\lib.rs",
repr_c_pub_structs: ReprCPubStructs(
[],
),
},
ParsedFile {
path: "...\\repr_c_pub_struct\\src\\main.rs",
repr_c_pub_structs: ReprCPubStructs(
[],
),
},
ParsedFile {
path: "...\\repr_c_pub_struct\\src\\unused.rs",
repr_c_pub_structs: ReprCPubStructs(
[
LineColumnEnds {
start_line: 1,
start_column: 0,
end_line: 4,
end_column: 1,
},
],
),
},
]
注意
路径将是绝对的。前缀已被有意删除。
序列化与反序列化
此库中的所有结构体都实现了 Serialize 和 Deserialize 特性来自 serde。因此,你可以将其转换为支持 serde 的许多数据格式。
数据格式
- JSON,由许多 HTTP API 使用的通用 JavaScript 对象表示法。
- Bincode,Servo 渲染引擎内部用于 IPC 的紧凑二进制格式。
- CBOR,一种为小消息大小而设计,无需版本协商的简洁二进制对象表示法。
- YAML,一种自称为人类友好的配置语言,而不是标记语言。
- MessagePack,一种类似于紧凑 JSON 的有效二进制格式。
- TOML,由Cargo使用的最小化配置格式。
- Pickle,在Python世界中常见的格式。
- RON,一种Rusty对象表示法。
- BSON,MongoDB使用的数据存储和网络传输格式。
- Avro,Apache Hadoop内部使用的二进制格式,支持模式定义。
- JSON5,包含ES5部分生产的JSON的超集。
- Postcard,一个对_no_std_和嵌入式系统友好的紧凑二进制格式。
- URL查询字符串,采用x-www-form-urlencoded格式。
- Envy,将环境变量反序列化为Rust结构体的一种方法。(仅反序列化)
- Envy Store,将AWS参数存储参数反序列化为Rust结构体的一种方法。(仅反序列化)
- S-expressions,Lisp语言家族使用的代码和数据文本表示。
- D-Bus的二进制线格式。
- FlexBuffers,Google的FlatBuffers零拷贝序列化格式的无模式兄弟。
- DynamoDB Items,由rusoto_dynamodb用于在DynamoDB之间传输数据的格式。
许可证
根据您的选择,在Apache License,Version 2.0或MIT许可证下许可。除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在此crate中的任何贡献,将按上述方式双重许可,不附加任何其他条款或条件。
依赖关系
~0.5–8MB
~62K SLoC