mformat: materials_format::Version,
}
- impl shapelib::LibrarySource for LibraryInBundle<'_> {
- fn catalogue_data(&self) -> &str { &self.catalogue_data }
- fn svg_dir(&self) -> String { self.svg_dir.clone() }
+ impl shapelib::LibrarySvgNoter for LibraryInBundle<'_> {
#[throws(shapelib::SubstError)]
fn note_svg(&mut self, basename: &GoodItemName,
src_name: Result<&str, &shapelib::SubstError>) {
let item = basename.clone();
self.need_svgs.push(SvgNoted { item, src_name });
}
+ }
+ impl shapelib::LibrarySource for LibraryInBundle<'_> {
+ fn catalogue_data(&self) -> &str { &self.catalogue_data }
+ fn svg_dir(&self) -> String { self.svg_dir.clone() }
fn bundle(&self) -> Option<bundles::Id> { Some(*self.id) }
#[throws(materials_format::VersionError)]
fn default_materials_format(&self) -> materials_format::Version {
self.mformat
}
+ fn svg_noter(&mut self) -> &mut dyn shapelib::LibrarySvgNoter { self }
}
for LibScanned { libname, dir_inzip, inzip } in libs {
}
impl<T> SvgBaseName<T> where T: Borrow<GoodItemName> {
#[throws(SubstError)]
- fn note(src: &mut dyn LibrarySource, i: T,
+ fn note(src: &mut dyn LibrarySvgNoter, i: T,
src_name: Result<&str, &SubstError>) -> Self {
src.note_svg(i.borrow(), src_name)?;
SvgBaseName(i)
}
}
-pub trait LibrarySource {
- fn catalogue_data(&self) -> &str;
- fn svg_dir(&self) -> String;
+pub trait LibrarySvgNoter {
#[throws(SubstError)]
fn note_svg(&mut self, _basename: &GoodItemName,
_src_name: Result<&str, &SubstError>) { }
+}
+pub trait LibrarySource: LibrarySvgNoter {
+ fn catalogue_data(&self) -> &str;
+ fn svg_dir(&self) -> String;
fn bundle(&self) -> Option<bundles::Id>;
fn default_materials_format(&self)
-> Result<materials_format::Version, MFVE>;
+
+ // Sadly dyn_upcast doesn't work because it doesn't support the
+ // non-'static lifetime on BuiltinLibrary
+ fn svg_noter(&mut self) -> &mut dyn LibrarySvgNoter;
}
struct BuiltinLibrary<'l> {
dirname: &'l str,
}
-impl LibrarySource for BuiltinLibrary<'_> {
+impl LibrarySvgNoter for BuiltinLibrary<'_> {
+}
+impl<'l> LibrarySource for BuiltinLibrary<'l> {
fn catalogue_data(&self) -> &str { self.catalogue_data }
fn svg_dir(&self) -> String { self.dirname.to_string() }
fn bundle(&self) -> Option<bundles::Id> { None }
fn default_materials_format(&self) -> materials_format::Version {
throw!(MFVE::Other("builtin libraries must have explicit version now!"));
}
+
+ fn svg_noter(&mut self) -> &mut dyn LibrarySvgNoter { self }
}
//---------- reading ----------
for fe in gdefn.files.0 {
process_files_entry(
- src, &mut l,
+ src.svg_noter(), &mut l,
&gdefn.item_prefix, &gdefn.item_suffix, &gdefn.sort,
&group, shape_calculable, fe
)?;
#[throws(LibraryLoadError)]
fn process_files_entry(
- src: &mut dyn LibrarySource, l: &mut Catalogue,
+ src: &mut dyn LibrarySvgNoter, l: &mut Catalogue,
item_prefix: &str, item_suffix: &str, sort: &str,
group: &Arc<GroupData>, shape_calculable: ShapeCalculable,
fe: FileData
impl Catalogue {
#[throws(LLE)]
fn add_item(&mut self,
- src: &mut dyn LibrarySource, src_name: Result<&str,&SubstError>,
+ src: &mut dyn LibrarySvgNoter,
+ src_name: Result<&str,&SubstError>,
item_name: &GoodItemName, catent: CatalogueEntry) {
type H<'e,X,Y> = hash_map::Entry<'e,X,Y>;