use re_chunk::TimelineName;
use re_chunk_store::LatestAtQuery;
use re_entity_db::EntityDb;
use re_types_core::Component;
pub(crate) fn validate_component<C: Component>(blueprint: &EntityDb) -> bool {
let engine = blueprint.storage_engine();
if let Some(data_type) = engine.store().lookup_datatype(&C::name()) {
if data_type != C::arrow_datatype() {
re_log::debug!(
"Unexpected datatype for component {:?}.\nFound: {:#?}\nExpected: {:#?}",
C::name(),
data_type,
C::arrow_datatype()
);
return false;
} else {
let query = LatestAtQuery::latest(TimelineName::new(""));
for path in blueprint.entity_paths() {
if let Some(array) = engine
.cache()
.latest_at(&query, path, [C::name()])
.component_batch_raw(&C::name())
{
if let Err(err) = C::from_arrow_opt(&*array) {
re_log::debug!(
"Failed to deserialize component {:?}: {:?}",
C::name(),
err
);
return false;
}
}
}
}
}
true
}