Skip to content

Commit 8f51633

Browse files
committed
Fix empty fields
1 parent ca43a63 commit 8f51633

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

crates/utils/re_mcap/src/layers/ros2_reflection.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use crate::parsers::{MessageParser, ParserContext};
2323
use crate::{Error, LayerIdentifier, MessageLayer};
2424

2525
struct Ros2ReflectionMessageParser {
26+
num_rows: usize,
2627
message_schema: MessageSchema,
2728
fields: Vec<(String, FixedSizeListBuilder<Box<dyn ArrayBuilder>>)>,
2829
}
@@ -55,6 +56,7 @@ impl Ros2ReflectionMessageParser {
5556
}
5657

5758
Self {
59+
num_rows,
5860
message_schema,
5961
fields,
6062
}
@@ -97,11 +99,36 @@ impl MessageParser for Ros2ReflectionMessageParser {
9799
let timelines = ctx.build_timelines();
98100

99101
let Self {
102+
num_rows,
100103
message_schema,
101104
fields,
102105
} = *self;
103106

104107
let archetype_name = message_schema.spec.name.clone().replace('/', ".");
108+
109+
if fields.is_empty() {
110+
// Create a list array with `num_rows` entries, where each entry is an empty list
111+
let empty_list = arrow::array::ListArray::new_null(
112+
std::sync::Arc::new(Field::new("empty", DataType::Null, true)),
113+
num_rows,
114+
);
115+
116+
let chunk = Chunk::from_auto_row_ids(
117+
ChunkId::new(),
118+
entity_path,
119+
timelines,
120+
std::iter::once((
121+
ComponentDescriptor::partial("empty")
122+
.with_builtin_archetype(archetype_name.clone()),
123+
empty_list,
124+
))
125+
.collect(),
126+
)
127+
.map_err(|err| Error::Other(anyhow::anyhow!(err)))?;
128+
129+
return Ok(vec![chunk]);
130+
}
131+
105132
let message_chunk = Chunk::from_auto_row_ids(
106133
ChunkId::new(),
107134
entity_path,

0 commit comments

Comments
 (0)