From: Ian Jackson Date: Mon, 29 Mar 2021 21:42:57 +0000 (+0100) Subject: item names: Launder OccultIlk too X-Git-Tag: otter-0.5.0~378 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=d533b2bb3272bc00062ce58055a35a44e399d2bf;p=otter.git item names: Launder OccultIlk too Signed-off-by: Ian Jackson --- diff --git a/src/gamestate.rs b/src/gamestate.rs index 1e8b2f1f..d6a9cb26 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -89,6 +89,48 @@ pub struct CommittedLogEntry { pub logent: LogEntry, } +//---------- GoodItemName ---------- + +mod item_name { + use super::*; + use shapelib::LibraryLoadError; + use LibraryLoadError as LLE; + + #[derive(Clone,Debug,Eq,PartialEq,Ord,PartialOrd,Hash)] + #[derive(Serialize,Deserialize)] + #[serde(transparent)] + pub struct GoodItemName(String); + impl Borrow for GoodItemName { + fn borrow(&self) -> &String { &self.0 } + } + impl GoodItemName { + pub fn as_str(&self) -> &str { &self.0 } + } + impl From for String { + fn from(i: GoodItemName) -> String { i.0 } + } + impl Display for GoodItemName { + #[throws(fmt::Error)] + fn fmt(&self, f: &mut fmt::Formatter) { f.write_str(&self.0)? } + } + + impl TryFrom for GoodItemName { + type Error = LibraryLoadError; + #[throws(LibraryLoadError)] + fn try_from(s: String) -> GoodItemName { + if s.as_bytes().iter().all(|&c:&u8| ( + c.is_ascii_alphanumeric() || + b"-_. ()".contains(&c) + )) { + GoodItemName(s) + } else { + throw!(LLE::BadItemName(s)) + } + } + } +} +pub use item_name::*; + // ---------- piece trait, and rendering ---------- #[typetag::serde(tag="type")] diff --git a/src/occultilks.rs b/src/occultilks.rs index 1d2567e6..7bf9fc9b 100644 --- a/src/occultilks.rs +++ b/src/occultilks.rs @@ -14,7 +14,7 @@ pub struct OccultIlkOwningId(Id); #[derive(Debug,Clone,Eq,PartialEq,Ord,PartialOrd,Hash)] #[derive(Serialize,Deserialize)] #[serde(transparent)] -pub struct OccultIlkName(pub Arc); +pub struct OccultIlkName(pub Arc); #[derive(Debug,Serialize,Deserialize)] pub struct OccultIlkData { diff --git a/src/shapelib.rs b/src/shapelib.rs index 1908bdbc..24a26d2d 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -60,51 +60,13 @@ enum OccData { #[allow(non_camel_case_types)] #[derive(Debug)] struct OccData_Internal { - item_name: Arc, + item_name: Arc, outline: Outline, desc: Html, xform: FaceTransform, svgd: parking_lot::Mutex>>, } -mod item_name { - use super::*; - - #[derive(Clone,Debug,Eq,PartialEq,Ord,PartialOrd,Hash)] - #[derive(Serialize,Deserialize)] - #[serde(transparent)] - pub struct GoodItemName(String); - impl Borrow for GoodItemName { - fn borrow(&self) -> &String { &self.0 } - } - impl GoodItemName { - pub fn as_str(&self) -> &str { &self.0 } - } - impl From for String { - fn from(i: GoodItemName) -> String { i.0 } - } - impl Display for GoodItemName { - #[throws(fmt::Error)] - fn fmt(&self, f: &mut fmt::Formatter) { f.write_str(&self.0)? } - } - - impl TryFrom for GoodItemName { - type Error = LibraryLoadError; - #[throws(LibraryLoadError)] - fn try_from(s: String) -> GoodItemName { - if s.as_bytes().iter().all(|&c:&u8| ( - c.is_ascii_alphanumeric() || - b"-_. ()".contains(&c) - )) { - GoodItemName(s) - } else { - throw!(LLE::BadItemName(s)) - } - } - } -} -pub use item_name::*; - #[derive(Error,Debug)] pub enum LibraryLoadError { #[error(transparent)] @@ -461,7 +423,8 @@ impl Contents { let svgd = match svgd { Some(svgd) => svgd.clone(), None => { - let occ_data = self.load_svg(&occ.item_name, &name)?; + let occ_data = self.load_svg(occ.item_name.as_str(), + name.as_str())?; let occ_data = Arc::new(occ_data); *svgd = Some(occ_data.clone()); occ_data @@ -683,8 +646,9 @@ fn load_catalogue(libname: &str, dirname: &str, toml_path: &str) -> Contents { throw!(LLE::OccultationColourMissing(colour.0.clone())); } let colour: Colour = colour.try_into()?; + let item_name = subst(item_name.as_str(), "_c", &colour.0)?; OccData::Internal(Arc::new(OccData_Internal { - item_name: Arc::new(subst(item_name.as_str(), "_c", &colour.0)?), + item_name: Arc::new(item_name.try_into()?), desc: Html(subst(&fe.desc.0, "_colour", "")?), outline: outline.clone(), xform: FaceTransform::from_group(&group.d)?,