use pyo3::{ffi::c_str, prelude::*};
use serde::{Deserialize, Serialize};
use serde_pyobject::{from_pyobject, to_pyobject};
#[test]
fn check_python_object() {
#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct MyClass {
name: String,
age: i32,
}
Python::attach(|py| {
py.run(
c_str!(
r#"
class MyClass:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
"#
),
None,
None,
)
.unwrap();
let my_python_class = py
.eval(
c_str!(
r#"
MyClass("John", 30)
"#
),
None,
None,
)
.unwrap();
let my_rust_class = MyClass {
name: "John".to_string(),
age: 30,
};
let any: Bound<'_, PyAny> = to_pyobject(py, &my_rust_class).unwrap();
let rust_version: MyClass = from_pyobject(my_python_class).unwrap();
let python_version: MyClass = from_pyobject(any).unwrap();
assert_eq!(rust_version, python_version);
})
}