diff --git a/betterproto-extras/src/merging.rs b/betterproto-extras/src/merging.rs index 09cc2fb..1fbe712 100644 --- a/betterproto-extras/src/merging.rs +++ b/betterproto-extras/src/merging.rs @@ -3,7 +3,7 @@ use crate::{ py_any_extras::PyAnyExtras, }; use prost_reflect::{DynamicMessage, ReflectMessage, Value}; -use pyo3::{IntoPy, PyAny}; +use pyo3::{PyAny, ToPyObject, PyObject}; pub fn merge_msg_into_pyobj(obj: &PyAny, msg: &DynamicMessage) -> Result<()> { for field in msg.descriptor().fields() { @@ -19,26 +19,26 @@ pub fn merge_msg_into_pyobj(obj: &PyAny, msg: &DynamicMessage) -> Result<()> { Ok(()) } -fn map_field_value<'py>( +fn map_field_value( field_name: &str, field_value: &Value, - proto_meta: &'py PyAny, -) -> Result<&'py PyAny> { + proto_meta: &PyAny, +) -> Result { let py = proto_meta.py(); match field_value { - Value::Bool(x) => Ok(x.into_py(py).into_ref(py)), - Value::Bytes(x) => Ok(x.into_py(py).into_ref(py)), - Value::F32(x) => Ok(x.into_py(py).into_ref(py)), - Value::F64(x) => Ok(x.into_py(py).into_ref(py)), - Value::I32(x) => Ok(x.into_py(py).into_ref(py)), - Value::I64(x) => Ok(x.into_py(py).into_ref(py)), - Value::String(x) => Ok(x.into_py(py).into_ref(py)), - Value::U32(x) => Ok(x.into_py(py).into_ref(py)), - Value::U64(x) => Ok(x.into_py(py).into_ref(py)), + Value::Bool(x) => Ok(x.to_object(py)), + Value::Bytes(x) => Ok(x.to_object(py)), + Value::F32(x) => Ok(x.to_object(py)), + Value::F64(x) => Ok(x.to_object(py)), + Value::I32(x) => Ok(x.to_object(py)), + Value::I64(x) => Ok(x.to_object(py)), + Value::String(x) => Ok(x.to_object(py)), + Value::U32(x) => Ok(x.to_object(py)), + Value::U64(x) => Ok(x.to_object(py)), Value::Message(msg) => { let obj = proto_meta.create_instance(field_name)?; merge_msg_into_pyobj(obj, msg)?; - Ok(obj) + Ok(obj.to_object(py)) } value => Err(Error::UnsupportedType(value.to_string())), }