chiark / gitweb /
shapelib: Make the colour a ColourSpec
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 29 Mar 2021 20:37:16 +0000 (21:37 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 29 Mar 2021 20:37:16 +0000 (21:37 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/shapelib-toml.rs
src/shapelib.rs

index ecbcbd04255c7e69da605ed79c2137c384d59bc8..de5bf79bcd0d5fe191b1cb05161ed1277d34ac37 100644 (file)
@@ -172,7 +172,7 @@ pub enum OccultationMethod {
   /// The description will be different too: `_colour` will be elided,
   /// along with up to one of any spaces either side of it.
   ByColour {
-    colour: String,
+    colour: ColourSpec,
   },
   ByBack {
     ilk: OccultIlkName,
index f5ad04d7581dede5a63a21db7f48a211faa412c8..45e80710ebe97d9f43b112ef78f3297afbaaa3aa 100644 (file)
@@ -107,6 +107,8 @@ pub enum LibraryLoadError {
   RepeatedSubstituionToken(&'static str),
   #[error("{:?}",&self)]
   MultipleMultipleFaceDefinitions,
+  #[error("{0}")]
+  UnsupportedColourSpec(#[from] UnsupportedColourSpec),
 }
 
 impl LibraryLoadError {
@@ -636,11 +638,12 @@ fn load_catalogue(libname: &str, dirname: &str, toml_path: &str) -> Contents {
       let occ = match &group.d.occulted {
         None => OccData::None,
         Some(OccultationMethod::ByColour { colour }) => {
-          if ! group.d.colours.contains_key(colour.as_str()) {
-            throw!(LLE::OccultationColourMissing(colour.clone()));
+          if ! group.d.colours.contains_key(colour.0.as_str()) {
+            throw!(LLE::OccultationColourMissing(colour.0.clone()));
           }
+          let colour: Colour = colour.try_into()?;
           OccData::Internal(Arc::new(OccData_Internal {
-            item_name: Arc::new(subst(&item_name, "_c", &colour)?),
+            item_name: Arc::new(subst(&item_name, "_c", &colour.0)?),
             desc: Html(subst(&fe.desc.0, "_colour", "")?),
             outline: outline.clone(),
             xform: FaceTransform::from_group(&group.d)?,