Структура ржавчины в PyObject в rust-cpython

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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам