use crate::{
metadata::{
diagnostics::DiagnosticCategory,
loader::{LoaderContext, MetadataLoader},
tables::EventMapRaw,
},
prelude::TableId,
Result,
};
pub(crate) struct EventMapLoader;
impl MetadataLoader for EventMapLoader {
fn load(&self, context: &LoaderContext) -> Result<()> {
let Some(header) = context.meta else {
return Ok(());
};
let Some(table) = header.table::<EventMapRaw>() else {
return Ok(());
};
table.par_iter().try_for_each(|row| {
let token_msg = || format!("event map 0x{:08x}", row.token.value());
let Some(owned) = context.handle_result(
row.to_owned(context.types, &context.event, &context.event_ptr, table),
DiagnosticCategory::Table,
token_msg,
)?
else {
return Ok(());
};
context.handle_error(owned.apply(), DiagnosticCategory::Table, token_msg)?;
context.event_map.insert(row.token, owned);
Ok(())
})
}
fn table_id(&self) -> Option<TableId> {
Some(TableId::EventMap)
}
fn dependencies(&self) -> &'static [TableId] {
&[TableId::Event, TableId::EventPtr]
}
}