3个版本
0.1.2 | 2021年12月25日 |
---|---|
0.1.1 | 2021年12月24日 |
0.1.0 | 2021年12月24日 |
#165 in FFI
39KB
91 行
一个用于提取#[no_mangle] pub extern "C"函数的库
为了公开具有C二进制接口的函数以与其他编程语言进行互操作,Rust开发者应使用#[no_mangle]属性并指定声明的函数的ABI。
#[no_mangle]
pub extern "C" fn func_name () /* -> ... */ {
// ...
}
您可以在此处了解更多信息
此库允许通过syn驱动的解析来获取这些无mangle-pub-extern-C函数的位置信息。
示例
main.rs
use no_mangle_pub_export_c_fn::{parse_for_no_mangle_pub_extern_c_fns, ParsedFile};
fn main() {
let crate_root = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let parsed_files: Vec<ParsedFile> = parse_for_no_mangle_pub_extern_c_fns(crate_root.as_str());
println!("{:#?}", parsed_files);
}
unused.rs
#[no_mangle]
pub extern "C" fn s() {
// test
}
Windows上的输出
[
ParsedFile {
path: "...\\no_mangle_pub_export_c_fn\\src\\lib.rs",
no_mangle_pub_export_c_fns: NoManglePubExportCFns {
no_mangle_pub_export_c_fn_vec: [],
},
},
ParsedFile {
path: "...\\no_mangle_pub_export_c_fn\\src\\main.rs",
no_mangle_pub_export_c_fns: NoManglePubExportCFns {
no_mangle_pub_export_c_fn_vec: [],
},
},
ParsedFile {
path: "...\\no_mangle_pub_export_c_fn\\src\\unused.rs",
no_mangle_pub_export_c_fns: NoManglePubExportCFns {
no_mangle_pub_export_c_fn_vec: [
NoManglePubExportCFnEnds {
start_line: 1,
start_column: 0,
end_line: 4,
end_column: 1,
},
],
},
},
]
序列化和反序列化
此库中的所有结构都实现了Serialize和Deserialize traits,来自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,一种无_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
~61K SLoC