impl shapelib::LibrarySource for LibraryInBundle<'_> {
fn catalogue_data(&self) -> &str { &self.catalogue_data }
fn svg_dir(&self) -> String { self.svg_dir.clone() }
+ #[throws(shapelib::SubstError)]
fn note_svg(&mut self, basename: &GoodItemName,
_src_name: Result<&str, &shapelib::SubstError>) {
self.need_svgs.push(basename.clone())
}
deref_to_field!{{ T: ?Sized } SvgBaseName<T>, T, 0 }
impl<T> SvgBaseName<T> where T: Borrow<GoodItemName> {
+ #[throws(SubstError)]
fn note(src: &mut dyn LibrarySource, i: T,
src_name: Result<&str, &SubstError>) -> Self {
- src.note_svg(i.borrow(), src_name);
+ src.note_svg(i.borrow(), src_name)?;
SvgBaseName(i)
}
}
pub trait LibrarySource {
fn catalogue_data(&self) -> &str;
fn svg_dir(&self) -> String;
+ #[throws(SubstError)]
fn note_svg(&mut self, _basename: &GoodItemName,
_src_name: Result<&str, &SubstError>) { }
fn bundle(&self) -> Option<bundles::Id>;
let item_name: GoodItemName = item_name.try_into()?;
let item_name = SvgBaseName::note(
src, Arc::new(item_name), src_name.as_ref().map(|s| s.as_str()),
- );
+ )?;
let desc = subst(&fe.desc, "_colour", "")?.to_html();
OccData::Internal(Arc::new(OccData_Internal {
item_name,
type H<'e,X,Y> = hash_map::Entry<'e,X,Y>;
let new_item = SvgBaseName::note(
src, item_name.clone(), src_name.clone()
- );
+ )?;
match l.items.entry(new_item) {
H::Occupied(oe) => throw!(LLE::DuplicateItem {
item: item_name.as_str().to_owned(),