chiark / gitweb /
shapelib: Break out resolve_square_size
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 May 2022 11:22:23 +0000 (12:22 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 9 May 2022 18:24:09 +0000 (19:24 +0100)
We're going to want to reuse this even more.

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

index 23781de4f6a831b8568fb6afcb63581ae09ee8c6..f3382a9bcb1921919b4a22819ce868a0011992cb 100644 (file)
@@ -578,16 +578,10 @@ impl FaceTransform {
       [s,s]
     };
     let centre = d.centre.map(Ok).unwrap_or_else(|| Ok::<_,LLE>({
-      match d.size.as_slice() {
-        [a] => [a,a],
-        [a,b] => [a,b],
-        x => throw!(LLE::WrongNumberOfSizeDimensions {
-          got: x.len(),
-          expected: [1,2],
-        }),
-      }.iter().cloned().zip(&scale).map(|(size,scale)| {
-        size * 0.5 / scale
-      })
+      resolve_square_size(&d.size)?
+        .coords.iter().cloned().zip(&scale).map(|(size,scale)| {
+          size * 0.5 / scale
+        })
         .collect::<ArrayVec<_,2>>()
         .into_inner()
         .unwrap()
@@ -604,6 +598,16 @@ impl FaceTransform {
   }
 }
 
+#[throws(LLE)]
+fn resolve_square_size<T:Copy>(size: &[T]) -> PosC<T> {
+  PosC{ coords: match size {
+    &[s] => [s,s],
+    &[w,h] => [w,h],
+    _ => throw!(LLE::WrongNumberOfSizeDimensions
+                { got: size.len(), expected: [1,2]}),
+  } }
+}
+
 //---------- Outlines ----------
 
 impl ShapeCalculable {
@@ -695,14 +699,7 @@ impl OutlineDefn for RectDefn {
 impl RectDefn {
   #[throws(LibraryLoadError)]
   fn get(group: &GroupData) -> RectShape {
-    RectShape { xy: PosC{ coords:
-      match group.d.size.as_slice() {
-        &[s] => [s,s],
-        s if s.len() == 2 => s.try_into().unwrap(),
-        size => throw!(LLE::WrongNumberOfSizeDimensions
-                       { got: size.len(), expected: [1,2]}),
-      }
-    }}
+    RectShape { xy: resolve_square_size(&group.d.size)? }
   }
 }