4个版本 (1个稳定版)
1.0.0 | 2023年8月21日 |
---|---|
0.3.0 | 2023年7月21日 |
0.2.0 | 2023年6月20日 |
0.1.0 | 2023年5月3日 |
#509 in 过程宏
每月115次下载
16KB
223 行
cpy-rs 🦀🛠️🐍
cpy-rs
是一个Rust库,它有助于从Rust到C++和Python创建绑定。它提供了一组宏,可以轻松地将Rust结构、枚举和函数导出到C/C++和Python。
功能
- cpy_enum:用于导出枚举。
- cpy_struct:用于导出结构。
- cpy_fn:用于导出C++和Python的功能。
- cpy_fn_c:用于导出专用的C++功能。
- cpy_fn_py:用于导出专用的Python功能。
- cpy_module:用于导出Python模块。
注意:建议在使用
cpy_fn_c
和cpy_fn_py
时在函数签名末尾使用_c
和_py
后缀。当在C++和Python中使用这些函数时,宏将删除后缀。后缀也不需要在cpy_module
内使用。以下示例可作为指南。
示例用法
仓库包含一个示例项目,演示了如何使用 cpy-rs
创建绑定。
代码使用
use cpy_binder::{cpy_enum, cpy_fn, cpy_fn_c, cpy_fn_py, cpy_module, cpy_struct};
#[cpy_enum]
#[comment = "Material types"]
enum Material {
Plastic,
Rubber,
}
#[cpy_struct]
#[comment = "2D Size"]
struct Size2D {
width: f64,
height: f64,
}
#[cpy_struct]
#[comment = "Tire structure"]
struct Tire {
material: Material,
pressure: f64,
size: Size2D,
}
#[cpy_fn]
#[comment_c = "@brief Creates and returns a random tire.\n
@return Tire A randomly generated tire.\n"]
#[comment_py = "Creates and returns a random tire.\n
Returns:\n
Tire: A randomly generated tire.\n"]
fn create_random_tire() -> Tire {
use rand::Rng;
let mut rng = rand::thread_rng();
let random_material = if rng.gen_bool(0.5) {
Material::Plastic
} else {
Material::Rubber
};
Tire {
material: random_material,
pressure: rng.gen_range(30.0..60.0),
size: Size2D {
width: rng.gen_range(5.0..10.0),
height: rng.gen_range(10.0..20.0),
},
}
}
#[cpy_fn_c]
#[comment = "Function for C ABI"]
fn format_wheel_identifier_c(dimensions: &[u8; 3]) {
println!("Wheel identifier: {:?}", dimensions);
}
#[cpy_fn_py]
#[comment = "Format wheel identifier for Python"]
fn format_wheel_identifier_py(dimensions: [u8; 3]) {
println!("Wheel identifier: {:?}", dimensions);
}
// Used to export Python module
cpy_module!(
name = example,
types = [Material, Size2D, Tire],
functions = [
create_random_tire,
format_wheel_identifier,
]
);
依赖项
~1.2–7MB
~47K SLoC