chiark / gitweb /
shapelib: Move catalogue_data into LibrarySource
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 11 May 2021 22:54:32 +0000 (23:54 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 11 May 2021 22:54:32 +0000 (23:54 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/shapelib.rs

index 7b58a0d3f53f5c06fc23a4c980655561205ffe32..56c5d6aa6dca201525739e614d0b212e5d40f59e 100644 (file)
@@ -593,24 +593,24 @@ fn resolve_inherit<'r>(depth: u8, groups: &toml::value::Table,
 }
 
 pub trait LibrarySource {
+  fn catalogue_data(&self) -> &str;
   fn svg_dir(&self) -> String;
   fn note_svg(&mut self, _basename: &GoodItemName) { }
 }
 
 struct BuiltinLibrary<'l> {
+  catalogue_data: &'l str,
   dirname: &'l str,
 }
 
 impl LibrarySource for BuiltinLibrary<'_> {
-  fn svg_dir(&self) -> String {
-    self.dirname.to_string()
-  }
+  fn catalogue_data(&self) -> &str { self.catalogue_data }
+  fn svg_dir(&self) -> String { self.dirname.to_string() }
 }
 
 #[throws(LibraryLoadError)]
-fn load_catalogue(libname: &str, catalogue_data: String,
-                  src: &mut dyn LibrarySource) -> Contents {
-  let toplevel: toml::Value = catalogue_data.parse()?;
+fn load_catalogue(libname: &str, src: &mut dyn LibrarySource) -> Contents {
+  let toplevel: toml::Value = src.catalogue_data().parse()?;
   let mut l = Contents {
     libname: libname.to_string(),
     items: HashMap::new(),
@@ -777,9 +777,10 @@ pub fn load1(l: &Explicit1) {
     s
   };
 
-  let mut src = BuiltinLibrary { dirname: &l.dirname };
+  let catalogue_data = catalogue_data.as_str();
+  let mut src = BuiltinLibrary { dirname: &l.dirname, catalogue_data };
 
-  let data = load_catalogue(&l.name, catalogue_data, &mut src)?;
+  let data = load_catalogue(&l.name, &mut src)?;
   let count = data.items.len();
   SHAPELIBS.write()
     .get_or_insert_with(default)