#repr #syn #parser #c

repr_c_pub_struct

一个用于提取 #[repr(C)] pub struct 结构体的库

2 个版本

0.1.1 2022 年 3 月 13 日
0.1.0 2021 年 12 月 26 日

#1876过程宏

MIT/Apache

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,
                },
            ],
        ),
    },
]

注意

路径将是绝对的。前缀已被有意删除。

序列化与反序列化

此库中的所有结构体都实现了 SerializeDeserialize 特性来自 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.0MIT许可证下许可。
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在此crate中的任何贡献,将按上述方式双重许可,不附加任何其他条款或条件。

依赖关系

~0.5–8MB
~62K SLoC