Структура ржавчины в PyObject в rust-cpython - PullRequest
0 голосов
/ 11 января 2019

Я использую rust-cpython для написания функций на Rust, которые можно вызывать на Python.

У меня есть существующая структура, которая используется в качестве вывода. Как мне сделать это в PyObject, который может понять rust-cpython?

Моя структура выглядит так:

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

1 Ответ

0 голосов
/ 11 января 2019

В моей ошибке компиляции сказано, что мне нужно реализовать черту 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
    }
}

Это своего рода хак, но он позволяет мне передавать данные с именованными полями в качестве ключей.

...