From a07f4ff774dd0ba0da3a502909d078ccf3e0c63f Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sun, 5 Feb 2023 13:35:23 -0330 Subject: pressure --- src/pressure/bar.rs | 15 +++++++++++++++ src/pressure/kilopascal.rs | 15 +++++++++++++++ src/pressure/mod.rs | 29 +++++++++++++++++++++++++++++ src/pressure/psi.rs | 15 +++++++++++++++ src/pressure/unit.rs | 11 +++++++++++ 5 files changed, 85 insertions(+) create mode 100644 src/pressure/bar.rs create mode 100644 src/pressure/kilopascal.rs create mode 100644 src/pressure/mod.rs create mode 100644 src/pressure/psi.rs create mode 100644 src/pressure/unit.rs (limited to 'src/pressure') diff --git a/src/pressure/bar.rs b/src/pressure/bar.rs new file mode 100644 index 0000000..63188c7 --- /dev/null +++ b/src/pressure/bar.rs @@ -0,0 +1,15 @@ +use super::{Kilopascal, Psi}; + +pub struct Bar(pub f64); + +impl From for Bar { + fn from(value: Kilopascal) -> Self { + value.into() + } +} + +impl From for Bar { + fn from(value: Psi) -> Self { + Kilopascal::from(value).into() + } +} diff --git a/src/pressure/kilopascal.rs b/src/pressure/kilopascal.rs new file mode 100644 index 0000000..0cfe63c --- /dev/null +++ b/src/pressure/kilopascal.rs @@ -0,0 +1,15 @@ +use super::{Bar, Psi}; + +pub struct Kilopascal(pub f64); + +impl From for Kilopascal { + fn from(value: Bar) -> Self { + Self(value.0 * 100.0) + } +} + +impl From for Kilopascal { + fn from(value: Psi) -> Self { + Self(value.0 * 6.894757) + } +} diff --git a/src/pressure/mod.rs b/src/pressure/mod.rs new file mode 100644 index 0000000..9b91aa5 --- /dev/null +++ b/src/pressure/mod.rs @@ -0,0 +1,29 @@ +mod bar; +mod kilopascal; +mod psi; +mod unit; + +pub use bar::Bar; +pub use kilopascal::Kilopascal; +pub use psi::Psi; +pub use unit::Unit; + +pub fn convert>(val: F, from: Unit, to: Unit) -> f64 { + match from { + Unit::Kilopascal => match to { + Unit::Kilopascal => val.into(), + Unit::Bar => Bar::from(Kilopascal(val.into())).0, + Unit::Psi => Psi::from(Kilopascal(val.into())).0, + }, + Unit::Bar => match to { + Unit::Bar => val.into(), + Unit::Kilopascal => Kilopascal::from(Bar(val.into())).0, + Unit::Psi => Psi::from(Bar(val.into())).0, + }, + Unit::Psi => match to { + Unit::Psi => val.into(), + Unit::Kilopascal => Kilopascal::from(Psi(val.into())).0, + Unit::Bar => Bar::from(Psi(val.into())).0, + }, + } +} diff --git a/src/pressure/psi.rs b/src/pressure/psi.rs new file mode 100644 index 0000000..fe41bca --- /dev/null +++ b/src/pressure/psi.rs @@ -0,0 +1,15 @@ +use super::{Bar, Kilopascal}; + +pub struct Psi(pub f64); + +impl From for Psi { + fn from(value: Kilopascal) -> Self { + value.into() + } +} + +impl From for Psi { + fn from(value: Bar) -> Self { + Kilopascal::from(value).into() + } +} diff --git a/src/pressure/unit.rs b/src/pressure/unit.rs new file mode 100644 index 0000000..6e246a3 --- /dev/null +++ b/src/pressure/unit.rs @@ -0,0 +1,11 @@ +#[derive(Default)] +pub enum Unit { + #[default] + Kilopascal, + Bar, + Psi, +} + +impl Unit { + pub const ALL: [Self; 3] = [Self::Kilopascal, Self::Bar, Self::Psi]; +} -- cgit v1.2.3