chiark / gitweb /
shapelib: Implement load_occult for ItemSpec
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 22 Mar 2021 00:57:01 +0000 (00:57 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 22 Mar 2021 01:37:00 +0000 (01:37 +0000)
Nothing calls this yet, but we will soon, ourselves.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/gamestate.rs
src/shapelib.rs

index 782f440cc8a3773abc418ed9977f4fd036d6acb8..24d61865c5960809dfc2c3f692c8bc67c5a724f3 100644 (file)
@@ -199,6 +199,9 @@ pub trait PieceSpec: Debug + Sync + Send + 'static {
   fn count(&self) -> usize { 1 }
   fn load(&self, i: usize, gpc: &mut GPiece, ir: &InstanceRef)
           -> Result<PieceSpecLoaded, SpecError>;
+  fn load_occult(&self) -> Result<Box<dyn OccultedPieceTrait>, SpecError> {
+    throw!(SpE::ComplexPieceWhereSimpleRequired)
+  }
 }
 
 // ========== implementations ==========
index 448c293c302c99f54131c1affd4ac149b7ac2ad9..1fc971a5a6bd843b3dc23539807eb6a014497e57 100644 (file)
@@ -271,6 +271,18 @@ impl PieceTrait for Item {
   fn itemname(&self) -> &str { &self.itemname }
 }
 
+#[typetag::serde(name="LibItem")]
+impl OccultedPieceTrait for Item {
+  #[throws(IE)]
+  fn svg(&self, f: &mut Html, _id: VisiblePieceId) {
+    self.svg_face(f, default())?;
+  }
+  #[throws(IE)]
+  fn describe_html(&self) -> Html {
+    self.describe_face(default())?
+  }
+}
+
 static SHAPELIBS: RwLock<Option<Registry>> = const_rwlock(None);
 
 pub fn libs_list() -> Vec<String> {
@@ -418,6 +430,10 @@ impl PieceSpec for ItemSpec {
           -> PieceSpecLoaded {
     self.find_load()?.into()
   }
+  #[throws(SpecError)]
+  fn load_occult(&self) -> Box<dyn OccultedPieceTrait> {
+    self.find_load()?.0 as Box<dyn OccultedPieceTrait>
+  }
 }
 
 #[typetag::serde(name="LibList")]