3 个版本

0.1.2 2019 年 12 月 17 日
0.1.1 2019 年 12 月 17 日
0.1.0 2019 年 12 月 17 日

#273 in FFI

MIT/Apache

18KB
398

Foreignc

Foreignc 是一个用于自动生成 Rust 方法安全 ffi abis 的框架。Foreignc 的主要优势是可以轻松部署和维护安全 ffi abis。该包由两部分组成。

  • 用于自动生成 ffi abis 和清理方法的宏
  • 用于自动生成 ffi abis 接收端的函数
    • 目前仅支持 Python

模板化

使用“template”功能,可以自动生成 ffi 的接收端。这将还添加两个新函数 get_package_dir 和 get_parsed_dir。这两个函数都返回当前 ffi api 的表示

默认类型

原始类型

以下原始类型受支持

  • bool
  • ()
  • i8, i16, i32, i64
  • u8, u16, u32, u64
  • f32, f64
  • &str (将转换为 CString)

其他类型

以下其他类型受支持

  • Result (将转换为 CResult)
  • Option (将转换为 COption)
  • String (将转换为 CString)

自定义结构体

可以通过使用 IntoFFi、FromFFi 特性或 Boxed、Json 宏来实现自定义类型。

安全性

一般来说,所有分配的内存都需要由创建者释放。这是 generate_free_methods 生成函数的基础,这些函数用于释放由 foreignc 创建的结构体分配的内存。以下函数已创建

  • free_string(ptr: *mut CString)
  • free_coption(ptr: *mut COption)
  • free_cresult(ptr: *mut CResult)

Boxed 结构体会自动生成一个 free 方法,使用以下约定 free_{to_snake_case(struct name)}

更多信息请参阅 ![git repository]

依赖关系

~1.1–3.5MB
~77K SLoC