33//! Provides support for Protobuf message serialization with rustecal.
44
55use prost:: Message ;
6+ use prost_reflect:: ReflectMessage ;
67use rustecal_core:: types:: DataTypeInfo ;
78use rustecal_pubsub:: typed_publisher:: PublisherMessage ;
89use rustecal_pubsub:: typed_subscriber:: SubscriberMessage ;
@@ -26,7 +27,7 @@ pub struct ProtobufMessage<T> {
2627
2728impl < T > SubscriberMessage < ' _ > for ProtobufMessage < T >
2829where
29- T : Message + Default + IsProtobufType ,
30+ T : Message + Default + IsProtobufType + ReflectMessage ,
3031{
3132 /// Returns metadata used by eCAL to describe the Protobuf type.
3233 ///
@@ -35,10 +36,12 @@ where
3536 /// - the Rust type name
3637 /// - an optional descriptor (currently empty)
3738 fn datatype ( ) -> DataTypeInfo {
39+ let default_instance = T :: default ( ) ;
40+
3841 DataTypeInfo {
3942 encoding : "proto" . to_string ( ) ,
40- type_name : std :: any :: type_name :: < T > ( ) . to_string ( ) ,
41- descriptor : vec ! [ ] , // descriptor injection planned
43+ type_name : default_instance . descriptor ( ) . full_name ( ) . to_string ( ) ,
44+ descriptor : default_instance . descriptor ( ) . parent_pool ( ) . encode_to_vec ( ) , // descriptor injection planned
4245 }
4346 }
4447
5659
5760impl < T > PublisherMessage for ProtobufMessage < T >
5861where
59- T : Message + Default + IsProtobufType ,
62+ T : Message + Default + IsProtobufType + ReflectMessage ,
6063{
6164 /// Returns the same datatype information as [`SubscriberMessage`] implementation.
6265 fn datatype ( ) -> DataTypeInfo {
0 commit comments