From 23dde387b761417a10e285d34e3b87a1033870a6 Mon Sep 17 00:00:00 2001 From: tilpner Date: Tue, 29 Aug 2023 15:47:54 +0200 Subject: [PATCH] feat(util/rational): add `Rational::non_zero` for guarding against zero-valued Rationals --- src/util/rational.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/util/rational.rs b/src/util/rational.rs index 9c9b89e..9b51202 100644 --- a/src/util/rational.rs +++ b/src/util/rational.rs @@ -14,6 +14,8 @@ use crate::ffi::*; pub struct Rational(pub i32, pub i32); impl Rational { + pub const ZERO: Rational = Rational(0, 1); + #[inline] pub fn new(numerator: i32, denominator: i32) -> Self { Rational(numerator, denominator) @@ -69,6 +71,17 @@ impl Rational { pub fn approx(&self) -> f64 { self.0 as f64 / self.1 as f64 } + + #[inline] + pub fn non_zero(self) -> Option { + (self.numerator() != 0).then_some(self) + } +} + +impl Default for Rational { + fn default() -> Self { + Rational::ZERO + } } impl From for Rational {