minor refactoring
This commit is contained in:
@@ -13,7 +13,7 @@ use pyo3::prelude::*;
|
||||
fn deserialize(obj: &PyAny, buf: &[u8]) -> Result<()> {
|
||||
let desc = create_cached_descriptor(obj)?;
|
||||
let msg = DynamicMessage::decode(desc, buf)?;
|
||||
merge_msg_into_pyobj(obj, &msg)?;
|
||||
merge_msg_into_pyobj(obj, msg)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -2,26 +2,22 @@ use crate::{
|
||||
error::{Error, Result},
|
||||
py_any_extras::PyAnyExtras,
|
||||
};
|
||||
use prost_reflect::{DynamicMessage, ReflectMessage, Value};
|
||||
use prost_reflect::{DynamicMessage, Value};
|
||||
use pyo3::{PyAny, PyObject, ToPyObject};
|
||||
|
||||
pub fn merge_msg_into_pyobj(obj: &PyAny, msg: &DynamicMessage) -> Result<()> {
|
||||
for field in msg.descriptor().fields() {
|
||||
let field_name = field.name();
|
||||
pub fn merge_msg_into_pyobj(obj: &PyAny, mut msg: DynamicMessage) -> Result<()> {
|
||||
for field in msg.take_fields() {
|
||||
let field_name = field.0.name();
|
||||
let proto_meta = obj.get_proto_meta()?;
|
||||
if msg.has_field_by_name(field_name) {
|
||||
if let Some(field_value) = msg.get_field_by_name(field_name) {
|
||||
obj.setattr(
|
||||
field_name,
|
||||
map_field_value(field_name, &field_value, proto_meta)?,
|
||||
)?;
|
||||
}
|
||||
}
|
||||
obj.setattr(
|
||||
field_name,
|
||||
map_field_value(field_name, field.1, proto_meta)?,
|
||||
)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn map_field_value(field_name: &str, field_value: &Value, proto_meta: &PyAny) -> Result<PyObject> {
|
||||
fn map_field_value(field_name: &str, field_value: Value, proto_meta: &PyAny) -> Result<PyObject> {
|
||||
let py = proto_meta.py();
|
||||
match field_value {
|
||||
Value::Bool(x) => Ok(x.to_object(py)),
|
||||
@@ -39,7 +35,7 @@ fn map_field_value(field_name: &str, field_value: &Value, proto_meta: &PyAny) ->
|
||||
Ok(obj.to_object(py))
|
||||
}
|
||||
Value::List(ls) => Ok(ls
|
||||
.iter()
|
||||
.into_iter()
|
||||
.map(|x| map_field_value(field_name, x, proto_meta))
|
||||
.collect::<Result<Vec<PyObject>>>()?
|
||||
.to_object(py)),
|
||||
|
||||
Reference in New Issue
Block a user