aboutsummaryrefslogtreecommitdiffstats
path: root/src/unit_of_measurement.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/unit_of_measurement.rs')
-rw-r--r--src/unit_of_measurement.rs36
1 files changed, 28 insertions, 8 deletions
diff --git a/src/unit_of_measurement.rs b/src/unit_of_measurement.rs
index a3b4b77..ce459bf 100644
--- a/src/unit_of_measurement.rs
+++ b/src/unit_of_measurement.rs
@@ -8,27 +8,47 @@ pub trait UnitOfMeasurement {
pub mod pressure {
use super::UnitOfMeasurement;
- #[derive(Default)]
- pub struct Pressure {
- val: i32,
- }
+ #[derive(Default, Clone)]
+ pub struct Pressure(i32);
+ #[derive(Copy, Clone)]
pub enum Unit {
Pascal = 1,
KiloPascal = 1000,
}
+ impl Unit {
+ // Pseudo iter::Cycle behavior.
+ pub fn next(&mut self) {
+ match self {
+ Unit::Pascal => {
+ *self = Unit::KiloPascal;
+ }
+ Unit::KiloPascal => {
+ *self = Unit::Pascal;
+ }
+ }
+ }
+ }
+
+ impl ToString for Unit {
+ fn to_string(&self) -> String {
+ match self {
+ Self::Pascal => String::from("Pa"),
+ Self::KiloPascal => String::from("kPa"),
+ }
+ }
+ }
+
impl UnitOfMeasurement for Pressure {
type Unit = Unit;
fn from_unit(unit: Self::Unit, n: i32) -> Self {
- Self {
- val: n * unit as i32,
- }
+ Self(n * unit as i32)
}
fn as_unit(&self, unit: Self::Unit) -> i32 {
- self.val / unit as i32
+ self.0 / unit as i32
}
}
}