catalogue_data: String,
svg_dir: &'l String,
need_svgs: Vec<GoodItemName>,
+ id: &'l Id,
}
impl shapelib::LibrarySource for LibraryInBundle<'_> {
fn note_svg(&mut self, basename: &GoodItemName) {
self.need_svgs.push(basename.clone())
}
+ fn bundle(&self) -> Option<bundles::Id> { Some(*self.id) }
}
for (progress_count, LibScanned { libname, dir_inzip, inzip })
catalogue_data: catalogue_data,
svg_dir: &svg_dir,
need_svgs: Vec::new(),
+ id: &id,
};
let contents = shapelib::load_catalogue(&libname, &mut src)
.map_err(|e| LE::badlib(&libname, &e))?;
pub struct Contents {
libname: String,
dirname: String,
+ bundle: Option<bundles::Id>,
items: HashMap<SvgBaseName<GoodItemName>, ItemData>,
}
#[derive(Debug,Clone,Serialize,Deserialize,Eq,PartialEq,Ord,PartialOrd)]
pub struct LibraryEnquiryData {
+ pub bundle: Option<bundles::Id>,
pub libname: String,
}
impl Display for LibraryEnquiryData {
#[throws(fmt::Error)]
fn fmt(&self, f: &mut Formatter) {
+ if let Some(id) = self.bundle.as_ref() {
+ write!(f, "[{}] ", id)?;
+ }
if self.libname.chars().all(|c| {
c.is_alphanumeric() || c=='-' || c=='_' || c=='.'
}) {
pub fn enquiry(&self) -> LibraryEnquiryData {
LibraryEnquiryData {
libname: self.libname.clone(),
+ bundle: self.bundle,
}
}
fn catalogue_data(&self) -> &str;
fn svg_dir(&self) -> String;
fn note_svg(&mut self, _basename: &GoodItemName) { }
+ fn bundle(&self) -> Option<bundles::Id>;
}
struct BuiltinLibrary<'l> {
impl LibrarySource for BuiltinLibrary<'_> {
fn catalogue_data(&self) -> &str { self.catalogue_data }
fn svg_dir(&self) -> String { self.dirname.to_string() }
+ fn bundle(&self) -> Option<bundles::Id> { None }
}
#[throws(LibraryLoadError)]
pub fn load_catalogue(libname: &str, src: &mut dyn LibrarySource) -> Contents {
let toplevel: toml::Value = src.catalogue_data().parse()?;
let mut l = Contents {
+ bundle: src.bundle(),
libname: libname.to_string(),
items: HashMap::new(),
dirname: src.svg_dir(),