Структура ржавчины в 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
}
}
Это своего рода хак, но он позволяет мне передавать данные с именованными полями в качестве ключей.