aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2023-02-05 13:35:23 -0330
committerSam Anthony <sam@samanthony.xyz>2023-02-05 13:35:23 -0330
commita07f4ff774dd0ba0da3a502909d078ccf3e0c63f (patch)
tree47b76316dc08bf266680ff7893f7a430bc90a1c4
parent3a1e9d081cc299a0ce3e950282464986a36376d9 (diff)
downloadvolute-rust.zip
pressurerust
-rw-r--r--src/pressure/bar.rs15
-rw-r--r--src/pressure/kilopascal.rs15
-rw-r--r--src/pressure/mod.rs29
-rw-r--r--src/pressure/psi.rs15
-rw-r--r--src/pressure/unit.rs11
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];
+}