aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--src/lib.rs2
-rw-r--r--src/main.rs21
-rw-r--r--src/volume.rs22
4 files changed, 39 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index e91cde7..0724066 100644
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,14 @@
build: test format
- cargo build --workspace
+ cargo build
run: build
cargo run
doc: test format
- cargo doc --workspace --open
+ cargo doc --open
test: format
- cargo test --workspace
+ cargo test
format:
cargo fmt --all
diff --git a/src/lib.rs b/src/lib.rs
index 0e68f71..cd3320a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,3 +1,3 @@
-mod volume;
+pub mod volume;
type Percent = u8;
diff --git a/src/main.rs b/src/main.rs
index 9bf6c51..2872fcf 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,13 +3,14 @@ use iced::{
Element, Sandbox, Settings,
};
+use volute::volume::{CubicMetre, Volume};
+
pub fn main() -> iced::Result {
App::run(Settings::default())
}
-#[derive(Default)]
struct App {
- displacement: f64,
+ displacement: Box<dyn Volume>,
ui: UI,
}
@@ -21,11 +22,21 @@ struct UI {
impl App {
fn set_displacement(&mut self, displacement: &str) {
if displacement.len() == 0 {
- self.displacement = 0.;
+ self.displacement.set(0.0);
+ self.ui.displacement = "".to_string();
} else if let Ok(d) = displacement.parse::<f64>() {
- self.displacement = d;
+ self.displacement.set(d);
+ self.ui.displacement = String::from(displacement);
+ }
+ }
+}
+
+impl Default for App {
+ fn default() -> Self {
+ Self {
+ displacement: Box::new(CubicMetre::default()),
+ ui: UI::default(),
}
- self.ui.displacement = String::from(displacement);
}
}
diff --git a/src/volume.rs b/src/volume.rs
index ea78938..087676c 100644
--- a/src/volume.rs
+++ b/src/volume.rs
@@ -1,12 +1,24 @@
use std::ops::Mul;
-trait Volume {
+pub trait Volume {
/// Returns the volume in SI units (cubic metres).
fn si(self) -> CubicMetre;
+
+ fn set(&mut self, val: f64);
}
-#[derive(Debug, PartialEq)]
-struct CubicMetre(f64);
+#[derive(Debug, Default, PartialEq)]
+pub struct CubicMetre(f64);
+
+impl Volume for CubicMetre {
+ fn si(self) -> CubicMetre {
+ self
+ }
+
+ fn set(&mut self, val: f64) {
+ self.0 = val;
+ }
+}
#[derive(Debug, PartialEq)]
struct Litre(f64);
@@ -15,6 +27,10 @@ impl Volume for Litre {
fn si(self) -> CubicMetre {
CubicMetre(self.0 * 10_f64.powf(-3.))
}
+
+ fn set(&mut self, val: f64) {
+ self.0 = val
+ }
}
impl From<i32> for Litre {