13个版本

0.8.7 2024年5月20日
0.8.6 2023年12月20日
0.8.4 2023年7月17日
0.8.2 2023年2月3日
0.6.0 2022年10月25日

#268 in 数据库接口

Download history 4/week @ 2024-04-14 291/week @ 2024-04-21 143/week @ 2024-04-28 502/week @ 2024-05-12 501/week @ 2024-05-19 12/week @ 2024-05-26 10/week @ 2024-06-02 6/week @ 2024-06-09 9/week @ 2024-06-16 300/week @ 2024-06-23 11/week @ 2024-06-30 111/week @ 2024-07-28

120 每月下载量
用于 2 crates

MIT/Apache

1MB
21K SLoC

Step Function I/O

oo-bindgen

CI

Rust的面向对象绑定生成器。

许可证

根据您的选择,在MIT或Apache v2许可证的条款下授权。

工作流程

  • 首先,您编写Rust库,不考虑绑定。
  • 然后,您编写C FFI到您的Rust库,考虑到面向对象语言将如何与之交互。您还确保尽可能保护Rust库与外部C世界之间的接口。
  • 您定义一个通用的面向对象的"模式",该模式使用C FFI与您的库交互。
  • 您使用读取先前定义的"模式"的生成器在目标语言中生成绑定,生成易于使用、惯用和可移植的代码。
  • 您在生成的语言中编写单元测试,以确保一切按预期工作。

目录

  • oo-bindgen: 构建您的库的面向对象表示的主库。
  • tests: 包含一个示例 foo-ffi 库和相关的 foo-bindings 面向对象库定义。它在每个支持的语言中构建相同的库。每种语言都编写了大量的单元测试,以检查生成的绑定是否按预期工作。

C绑定

编译由oo-bindgen生成的库的CMakeLists.txt的最小示例如下

cmake_minimum_required(VERSION 3.8)

project(my_awesome_project LANGUAGES C)

# Find the foo library generated by oo-bindgen
set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR}/foo/cmake)
find_package(foo REQUIRED)

# Add your awesome project with a dependency to foo
add_executable(my_awesome_project main.c)
target_link_libraries(my_awesome_project PRIVATE foo)

# Copy the DLL/.so after build
add_custom_command(TARGET my_awesome_project POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:foo> $<TARGET_FILE_DIR:my_awesome_project>
)

.NET绑定

  • 创建一个新的本地 NuGet 首源。为此,在某个位置创建一个空目录,然后运行以下命令:nuget sources add -Name my-nuget-feed -Source /my-nuget-feed
  • 使用以下命令将生成的 NuGet 包添加到其中:nuget add foo.0.1.0.nupkg -Source /my-nuget-feed
  • 在您的项目中添加对包的依赖。您可以执行以下命令:dotnet add MyAwesomeProject package foo,或者通过 Visual Studio 界面添加。它应该在您的 .csproj 文件中添加一行,如下所示:<PackageReference Include="foo" Version="0.1.0" />

Java 绑定

  • 使用以下命令将 JAR 安装到您的本地 Maven 仓库中:mvn org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install-file -D"file=foo-0.1.0.jar"
  • 使用以下命令在项目中添加依赖项:
<dependency>
    <groupId>io.stepfunc</groupId>
    <artifactId>foo</artifactId>
    <version>0.1.0</version>
</dependency>

依赖项

~6.5–10MB
~183K SLoC