diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2023-02-05 13:35:23 -0330 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2023-02-05 13:35:23 -0330 |
| commit | a07f4ff774dd0ba0da3a502909d078ccf3e0c63f (patch) | |
| tree | 47b76316dc08bf266680ff7893f7a430bc90a1c4 /src | |
| parent | 3a1e9d081cc299a0ce3e950282464986a36376d9 (diff) | |
| download | volute-a07f4ff774dd0ba0da3a502909d078ccf3e0c63f.zip | |
pressurerust
Diffstat (limited to 'src')
| -rw-r--r-- | src/pressure/bar.rs | 15 | ||||
| -rw-r--r-- | src/pressure/kilopascal.rs | 15 | ||||
| -rw-r--r-- | src/pressure/mod.rs | 29 | ||||
| -rw-r--r-- | src/pressure/psi.rs | 15 | ||||
| -rw-r--r-- | src/pressure/unit.rs | 11 |
5 files changed, 85 insertions, 0 deletions
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<Kilopascal> for Bar { + fn from(value: Kilopascal) -> Self { + value.into() + } +} + +impl From<Psi> 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<Bar> for Kilopascal { + fn from(value: Bar) -> Self { + Self(value.0 * 100.0) + } +} + +impl From<Psi> 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<F: Into<f64>>(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<Kilopascal> for Psi { + fn from(value: Kilopascal) -> Self { + value.into() + } +} + +impl From<Bar> 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]; +} |