@@ -3,6 +3,8 @@ use crate::protobuf::get_message_descriptor_from_pool;
3
3
use prost_reflect:: ReflectMessage ;
4
4
use prost_reflect:: { DynamicMessage , MessageDescriptor } ;
5
5
6
+ use tracing:: debug;
7
+
6
8
pub fn proto_to_value (
7
9
descriptor_pool : Option < & prost_reflect:: DescriptorPool > ,
8
10
prost_reflect_value : & prost_reflect:: Value ,
@@ -50,10 +52,22 @@ pub fn proto_to_value(
50
52
if let prost_reflect:: Value :: String ( type_url) = & * type_url_cow {
51
53
if let prost_reflect:: Value :: Bytes ( value) = & * value_cow {
52
54
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
+ }
57
71
}
58
72
}
59
73
}
0 commit comments