Skip to content

Commit 65cab24

Browse files
committed
Fix empty fields
1 parent 337521f commit 65cab24

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8986,7 +8986,6 @@ dependencies = [
89868986
"mcap",
89878987
"prost-reflect",
89888988
"re_chunk",
8989-
"re_format_arrow",
89908989
"re_log",
89918990
"re_log_types",
89928991
"re_tracing",

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)