У меня есть реализация struct + в Rust, которую я возвращаю Python. Этот объект также может быть передан назад в Rust для дальнейшей работы. (В моем реальном коде я использую HashMap<String, MyStruct>
, но даже простое использование структуры, по-видимому, вызывает те же проблемы, поэтому мой пример использует struct Person
для простоты.)
Похоже, что я нужно impl FromPyObject for Person
, но Rust не может найти PyAny
s downcast
метод
#[pyclass]
struct Person {
name: String,
age: u8,
height_cm: f32,
}
impl pyo3::FromPyObject<'_> for Person {
fn extract(any: &PyAny) -> PyResult<Self> {
Ok(any.downcast().unwrap())
^^^^^^^^ method not found in `&pyo3::types::any::PyAny`
}
}
#[pyfunction]
fn make_person() -> PyResult<Person> {
Ok(Person {
name: "Bilbo Baggins".to_string(),
age: 51,
height_cm: 91.44,
})
}
#[pyfunction]
fn person_info(py:Python, p: PyObject) -> PyResult<()> {
let p : Person = p.extract(py)?;
println!("{} is {} years old", p.name, p.age);
Ok(())
}
Это правильный способ передать объект Rust из Python обратно в ржавчину? Если да, то как правильно использовать PyAny
здесь?