use super::ReadError;
#[derive(Clone, Copy, Debug)]
pub struct StringTable<'a> {
strings: capnp::text_list::Reader<'a>,
}
impl<'a> StringTable<'a> {
pub(crate) fn read_capnp(strings: capnp::text_list::Reader<'a>) -> Self {
Self { strings }
}
pub fn get(&self, idx: u16, access_context: &'static str) -> Result<&'a str, ReadError> {
let idx = idx as u32;
let string = self
.strings
.try_get(idx)
.ok_or_else(|| ReadError::StringOutOfBounds {
context: access_context,
idx,
count: self.len(),
})?
.expect("Invalid metadata name definition");
let string = string.to_str().map_err(|e| ReadError::StringNotUtf8 {
context: access_context,
idx,
source: e,
})?;
Ok(string)
}
pub fn len(&self) -> usize {
self.strings.len() as usize
}
}