在rust-cpython中将rust结构转换为PyObject

时间:2019-01-11 04:32:59

标签: python rust cpython python-cffi

我正在使用rust-cpython在Rust中编写可在Python中调用的函数。

我有一个现有的结构用作输出。如何将其变成rust-cpython可以理解的PyObject?

我的结构如下:

struct Block {
    start: i32,
    stop: i32,
}

1 个答案:

答案 0 :(得分:0)

我的编译错误表明我需要在我的结构上实现ToPyObject特性。 为了用一种PyObject类型表示我的结构,我决定使用PyDict。

我看着rust-cpython如何为HashMap做的,我只是将它复制了过来。

impl ToPyObject for Block {
    type ObjectType = PyDict;

    fn to_py_object(&self, py: Python) -> PyDict {
        let dict = PyDict::new(py);
        dict.set_item(py, "start", self.start).unwrap();
        dict.set_item(py, "stop", self.stop).unwrap();

        dict
    }
}

这是一种破解,但是它允许我传递带有命名字段作为键的数据。