From 84af1571221c29ab1ef965b951c7e0823beedc67 Mon Sep 17 00:00:00 2001 From: Erik Friese Date: Wed, 30 Aug 2023 15:39:34 +0200 Subject: [PATCH] minor refactoring --- betterproto-extras/Cargo.lock | 4 ++-- betterproto-extras/Cargo.toml | 2 +- betterproto-extras/src/lib.rs | 2 +- betterproto-extras/src/merging.rs | 24 ++++++++++-------------- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/betterproto-extras/Cargo.lock b/betterproto-extras/Cargo.lock index a61fc33..911b4ee 100644 --- a/betterproto-extras/Cargo.lock +++ b/betterproto-extras/Cargo.lock @@ -150,9 +150,9 @@ dependencies = [ [[package]] name = "prost-reflect" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000e1e05ebf7b26e1eba298e66fe4eee6eb19c567d0ffb35e0dd34231cdac4c8" +checksum = "6b823de344848e011658ac981009100818b322421676740546f8b52ed5249428" dependencies = [ "once_cell", "prost", diff --git a/betterproto-extras/Cargo.toml b/betterproto-extras/Cargo.toml index dc782ba..a3af32f 100644 --- a/betterproto-extras/Cargo.toml +++ b/betterproto-extras/Cargo.toml @@ -8,6 +8,6 @@ name = "betterproto_extras" crate-type = ["cdylib"] [dependencies] -prost-reflect = "0.11.4" +prost-reflect = "0.11.5" pyo3 = { version = "0.19.0", features = ["abi3-py37", "extension-module"] } thiserror = "1.0.47" diff --git a/betterproto-extras/src/lib.rs b/betterproto-extras/src/lib.rs index 416d5d1..e7a0b39 100644 --- a/betterproto-extras/src/lib.rs +++ b/betterproto-extras/src/lib.rs @@ -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(()) } diff --git a/betterproto-extras/src/merging.rs b/betterproto-extras/src/merging.rs index 88d12eb..7f4d86a 100644 --- a/betterproto-extras/src/merging.rs +++ b/betterproto-extras/src/merging.rs @@ -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 { +fn map_field_value(field_name: &str, field_value: Value, proto_meta: &PyAny) -> Result { 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::>>()? .to_object(py)),