10个版本 (5个重大更新)
新 0.6.0 | 2024年8月22日 |
---|---|
0.5.0 | 2023年11月3日 |
0.4.0 | 2021年8月3日 |
0.3.1 | 2021年1月26日 |
0.1.1 | 2019年6月16日 |
#156 在 过程宏 中
每月6,487次下载
在 4 crates 中使用
11KB
165 行
Dict-Derive
PyO3的FromPyObject
和IntoPy<PyObject>
特型的派生宏。派生实现将Python的字典转换为你的Rust结构体,反之亦然。
用法
将库添加到你的Cargo.toml
中,并包含PyO3
[dependencies]
pyo3 = { version = "0.22", features = ["gil-refs"] }
dict_derive = "0.6"
导入派生实现并在你的结构体上使用它
extern crate dict_derive;
use dict_derive::{FromPyObject, IntoPyObject};
#[derive(FromPyObject, IntoPyObject)]
struct User {
name: String,
email: String,
age: u32,
}
然后你可以在PyO3函数中将你的结构体用作参数和返回值
extern crate pyo3;
use pyo3::prelude::*;
use pyo3::wrap_pyfunction;
// Requires FromPyObject to receive a struct as an argument
#[pyfunction]
fn get_contact_info(user: User) -> PyResult<String> {
Ok(format!("{} - {}", user.name, user.email))
}
// Requires IntoPyObject to return a struct
#[pyfunction]
fn get_default_user() -> PyResult<User> {
Ok(User {
name: "Default".to_owned(),
email: "[email protected]".to_owned(),
age: 27,
})
}
然后使用普通的Python字典调用你的函数
>>> import mylib
>>> mylib.get_contact_info({"name": "Thor", "email": "[email protected]", "age": 23})
'Thor - thor@asgard.com'
>>> mylib.get_default_user()
{'name': 'Default', 'email': 'default@user.com', 'age': 27}
旧版PyO3版本
- 对于PyO3版本0.7.0或更低版本,使用此crate的0.1版本。
- 对于PyO3版本0.8到0.10,使用此crate的0.2版本。
- 对于PyO3版本0.11到0.13,使用此crate的0.3版本。
- 对于PyO3版本0.14到0.19,使用此crate的0.4版本。
- 对于PyO3版本0.20,使用此crate的0.5版本。
依赖关系
~1.5MB
~35K SLoC