Skip to content

Commit 1420ff8

Browse files
committed
Do not fail on missed MessageDescriptor
1 parent 10cf878 commit 1420ff8

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

src/protobuf/parse.rs

+18-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ use crate::protobuf::get_message_descriptor_from_pool;
33
use prost_reflect::ReflectMessage;
44
use prost_reflect::{DynamicMessage, MessageDescriptor};
55

6+
use tracing::debug;
7+
68
pub fn proto_to_value(
79
descriptor_pool: Option<&prost_reflect::DescriptorPool>,
810
prost_reflect_value: &prost_reflect::Value,
@@ -50,10 +52,22 @@ pub fn proto_to_value(
5052
if let prost_reflect::Value::String(type_url) = &*type_url_cow {
5153
if let prost_reflect::Value::Bytes(value) = &*value_cow {
5254
let type_name = type_url.trim_start_matches("type.googleapis.com/");
53-
let message_descriptor = get_message_descriptor_from_pool(descriptor_pool, type_name)?;
54-
let dynamic_message = DynamicMessage::decode(message_descriptor, value.clone())
55-
.map_err(|error| format!("Error parsing embedded protobuf message: {:?}", error))?;
56-
return proto_to_value(Some(descriptor_pool), &prost_reflect::Value::Message(dynamic_message), None);
55+
match get_message_descriptor_from_pool(descriptor_pool, type_name) {
56+
Ok(message_descriptor) => {
57+
match DynamicMessage::decode(message_descriptor, value.clone()) {
58+
Ok(dynamic_message) => {
59+
return proto_to_value(Some(descriptor_pool), &prost_reflect::Value::Message(dynamic_message), None);
60+
}
61+
Err(error) => {
62+
return Err(format!("Error parsing embedded protobuf message: {:?}", error));
63+
}
64+
}
65+
}
66+
Err(_) => {
67+
debug!("Message type '{}' not found in the descriptor pool, ignoring message.", type_name);
68+
// Optionally handle ignored message case here if needed
69+
}
70+
}
5771
}
5872
}
5973
}

0 commit comments

Comments
 (0)