1
1
use std:: collections:: BTreeMap ;
2
2
3
3
use super :: MessageLayer ;
4
- use crate :: {
5
- parsers :: MessageParser ,
6
- parsers :: ros2msg:: {
4
+ use crate :: parsers :: {
5
+ MessageParser ,
6
+ ros2msg:: {
7
7
Ros2MessageParser ,
8
+ idl:: { MessageSchema , MessageSpec } ,
8
9
rcl_interfaces:: LogMessageParser ,
9
10
sensor_msgs:: {
10
11
BatteryStateMessageParser , CameraInfoMessageParser , CompressedImageMessageParser ,
@@ -92,9 +93,28 @@ impl MessageLayer for McapRos2Layer {
92
93
}
93
94
94
95
fn supports_channel ( & self , channel : & mcap:: Channel < ' _ > ) -> bool {
95
- channel. schema . as_ref ( ) . is_some_and ( |s| {
96
+ if channel. schema . as_ref ( ) . is_some_and ( |s| {
96
97
s. encoding . as_str ( ) == Self :: ENCODING && self . registry . contains_key ( & s. name )
97
- } )
98
+ } ) {
99
+ true
100
+ } else {
101
+ let schema = channel. schema . as_ref ( ) . unwrap ( ) ;
102
+ let schema_content = String :: from_utf8_lossy ( schema. data . as_ref ( ) ) ;
103
+ if let Ok ( message_spec) = MessageSchema :: parse ( schema. name . clone ( ) , & schema_content) {
104
+ re_log:: warn_once!(
105
+ "Message schema {:?} is currently not supported, but parsed spec: {message_spec:#?}" ,
106
+ schema. name
107
+ ) ;
108
+ } else {
109
+ re_log:: warn_once!(
110
+ "Message schema {:?} is currently not supported, and failed to parse spec" ,
111
+ schema. name
112
+ ) ;
113
+ re_log:: warn_once!( "Schema content:\n {}" , schema_content) ;
114
+ }
115
+
116
+ false
117
+ }
98
118
}
99
119
100
120
fn message_parser (
@@ -114,6 +134,7 @@ impl MessageLayer for McapRos2Layer {
114
134
"Message schema {:?} is currently not supported" ,
115
135
schema. name
116
136
) ;
137
+
117
138
None
118
139
}
119
140
}
0 commit comments