From: Ian Jackson Date: Tue, 17 May 2022 01:10:36 +0000 (+0100) Subject: Break out ColourSpecExt::resolve X-Git-Tag: otter-1.1.0~74 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=f52210aef261eda550a562277e2bbb79863849c4;p=otter.git Break out ColourSpecExt::resolve Hrm, maybe this should have been load() ? This will do for now. Signed-off-by: Ian Jackson --- diff --git a/src/dice.rs b/src/dice.rs index ede7a2b8..cf9df81f 100644 --- a/src/dice.rs +++ b/src/dice.rs @@ -157,9 +157,7 @@ impl PieceSpec for Spec { index_vec!["".into()] }; - let label_colour: Colour = self.label.colour.as_ref() - .map(TryInto::try_into).transpose()? - .unwrap_or_else(|| Html::lit("black").into()); + let label_colour = self.label.colour.resolve()?; if_let!{ Some((nfaces,_)) = nfaces; else throw!(SpecError::MultipleFacesRequired) }; diff --git a/src/imports.rs b/src/imports.rs index 7c8f9d5b..062f51e0 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -103,6 +103,7 @@ pub use crate::shapelib; pub use crate::shapelib::{ItemEnquiryData, LibraryEnquiryData}; pub use crate::shapelib::{LibraryLoadError}; pub use crate::spec::*; +pub use crate::spec::imp::ColourSpecExt as _; pub use crate::spec::piece_specs::{FaceColourSpecs, SimpleCommon}; pub use crate::updates::*; pub use crate::utils::*; diff --git a/src/spec.rs b/src/spec.rs index 31e4eff0..8e00709a 100644 --- a/src/spec.rs +++ b/src/spec.rs @@ -606,6 +606,16 @@ pub mod imp { } } + #[ext(pub, name=ColourSpecExt)] + impl Option { + #[throws(UnsupportedColourSpec)] + fn resolve(&self) -> Colour { + self.as_ref() + .map(TryInto::try_into).transpose()? + .unwrap_or_else(|| Html::lit("black").into()) + } + } + impl TryFrom<&ColourSpec> for Colour { type Error = UnsupportedColourSpec; #[throws(UnsupportedColourSpec)]