From feff013abb17f31bc5305fe77fe67cf615c19ff2 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 31 Oct 2021 14:40:15 +0100 Subject: More useful `Spec` helpers --- src/geom/spec.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'src/geom') diff --git a/src/geom/spec.rs b/src/geom/spec.rs index a257214b..4d631399 100644 --- a/src/geom/spec.rs +++ b/src/geom/spec.rs @@ -31,6 +31,23 @@ impl Spec { Spec { x: f(self.x), y: f(self.y) } } + /// Zip two instances into an instance over a tuple. + pub fn zip(self, other: impl Into>) -> Spec<(T, U)> { + let other = other.into(); + Spec { + x: (self.x, other.x), + y: (self.y, other.y), + } + } + + /// Whether a condition is true for both fields. + pub fn all(self, mut f: F) -> bool + where + F: FnMut(&T) -> bool, + { + f(&self.x) && f(&self.y) + } + /// Convert to the generic representation. pub fn to_gen(self, block: SpecAxis) -> Gen { match block { @@ -38,14 +55,11 @@ impl Spec { SpecAxis::Vertical => Gen::new(self.x, self.y), } } +} - /// Compares if this instance's field are equal to that of another with - /// respect to `eq`. - pub fn eq_by(&self, other: &Spec, eq: F) -> bool - where - F: Fn(&T, &U) -> bool, - { - eq(&self.x, &other.x) && eq(&self.y, &other.y) +impl From for Spec { + fn from(size: Size) -> Self { + size.to_spec() } } -- cgit v1.2.3