Skip to content

Commit

Permalink
Implemented conversion functionality throughout the UI.
Browse files Browse the repository at this point in the history
Most everyday conversions are available AFAIK
  • Loading branch information
shartrec committed Jun 26, 2024
1 parent 9de51b8 commit 1d06944
Show file tree
Hide file tree
Showing 17 changed files with 419 additions and 141 deletions.
36 changes: 36 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ preferences = "^1.1.0"
simplelog = "0.12.2"
serde = { version = "1.0.203", features = ["derive"] }
serde_json = "1.0.117"
strum = { version = "0.26.3", features = ["derive"] }
strum_macros = "0.26.4"

[dependencies.iced]
git = "https://github.com/iced-rs/iced.git"
Expand Down
31 changes: 19 additions & 12 deletions src/conversions/area.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ use crate::conversions::length::*;
/// intrinsically immutable
pub const SQ_METRE: Unit = Unit {
name: "sq_metre",
name: "Sq_Metre",
dimension: Dimension::Area,
system: System::Metric,
to_base: None,
Expand All @@ -37,7 +37,7 @@ pub const SQ_METRE: Unit = Unit {
from_system_base: None,
};
pub const SQ_CENTIMETRE: Unit = Unit {
name: "sq_centimetre",
name: "Sq_Centimetre",
dimension: Dimension::Area,
system: System::Metric,
to_base: Some(|v| CENTIMETRE.to_base.unwrap()(CENTIMETRE.to_base.unwrap()(v))),
Expand All @@ -46,7 +46,7 @@ pub const SQ_CENTIMETRE: Unit = Unit {
from_system_base: None,
};
pub const SQ_MILLIMETRE: Unit = Unit {
name: "sq_millimetre",
name: "Sq_Millimetre",
dimension: Dimension::Area,
system: System::Metric,
to_base: Some(|v| MILLIMETRE.to_base.unwrap()(MILLIMETRE.to_base.unwrap()(v))),
Expand All @@ -55,7 +55,7 @@ pub const SQ_MILLIMETRE: Unit = Unit {
from_system_base: None,
};
pub const SQ_MICROMETRE: Unit = Unit {
name: "sq_micrometre",
name: "Sq_Micrometre",
dimension: Dimension::Area,
system: System::Metric,
to_base: Some(|v| MICROMETRE.to_base.unwrap()(MICROMETRE.to_base.unwrap()(v))),
Expand All @@ -64,7 +64,7 @@ pub const SQ_MICROMETRE: Unit = Unit {
from_system_base: None,
};
pub const HECTARE: Unit = Unit {
name: "hectare",
name: "Hectare",
dimension: Dimension::Area,
system: System::Metric,
to_base: Some(|v| v * 10000.0),
Expand All @@ -74,7 +74,7 @@ pub const HECTARE: Unit = Unit {
};

pub const SQ_KILOMETRE: Unit = Unit {
name: "sq_kilometre",
name: "Sq_Kilometre",
dimension: Dimension::Area,
system: System::Metric,
to_base: Some(|v| KILOMETRE.to_base.unwrap()(KILOMETRE.to_base.unwrap()(v))),
Expand All @@ -86,7 +86,7 @@ pub const SQ_KILOMETRE: Unit = Unit {
// Imperial units

pub const SQ_YARD: Unit = Unit {
name: "sq_yard",
name: "Sq_Yard",
dimension: Dimension::Area,
system: System::Imperial,
to_base: Some(|v| YARD.to_base.unwrap()(YARD.to_base.unwrap()(v))),
Expand All @@ -95,7 +95,7 @@ pub const SQ_YARD: Unit = Unit {
from_system_base: None,
};
pub const SQ_FOOT: Unit = Unit {
name: "sq_foot",
name: "Sq_Foot",
dimension: Dimension::Area,
system: System::Imperial,
to_base: Some(|v| FOOT.to_base.unwrap()(FOOT.to_base.unwrap()(v))),
Expand All @@ -104,7 +104,7 @@ pub const SQ_FOOT: Unit = Unit {
from_system_base: Some(|v| FOOT.from_system_base.unwrap()(FOOT.from_system_base.unwrap()(v))),
};
pub const SQ_INCH: Unit = Unit {
name: "sq_inch",
name: "Sq_Inch",
dimension: Dimension::Area,
system: System::Imperial,
to_base: Some(|v| INCH.to_base.unwrap()(INCH.to_base.unwrap()(v))),
Expand All @@ -113,7 +113,7 @@ pub const SQ_INCH: Unit = Unit {
from_system_base: Some(|v| INCH.from_system_base.unwrap()(INCH.from_system_base.unwrap()(v))),
};
pub const ACRE: Unit = Unit {
name: "acre",
name: "Acre",
dimension: Dimension::Area,
system: System::Imperial,
to_base: Some(|v| v * 4046.856422),
Expand All @@ -122,7 +122,7 @@ pub const ACRE: Unit = Unit {
from_system_base: Some(|v| v / 4840.0),
};
pub const SQ_MILE: Unit = Unit {
name: "sq_mile",
name: "Sq_Mile",
dimension: Dimension::Area,
system: System::Imperial,
to_base: Some(|v| MILE.to_base.unwrap()(MILE.to_base.unwrap()(v))),
Expand All @@ -131,7 +131,7 @@ pub const SQ_MILE: Unit = Unit {
from_system_base: Some(|v| MILE.from_system_base.unwrap()(MILE.from_system_base.unwrap()(v))),
};
pub const SQ_NAUTICAL_MILE: Unit = Unit {
name: "sq_nm",
name: "Sq_Nm",
dimension: Dimension::Area,
system: System::Imperial,
to_base: Some(|v| NAUTICAL_MILE.to_base.unwrap()(NAUTICAL_MILE.to_base.unwrap()(v))),
Expand All @@ -140,6 +140,13 @@ pub const SQ_NAUTICAL_MILE: Unit = Unit {
from_system_base: Some(|v| NAUTICAL_MILE.from_system_base.unwrap()(NAUTICAL_MILE.from_system_base.unwrap()(v))),
};

pub(crate) fn get_all() -> Vec<&'static Unit> {
vec![&SQ_METRE, &SQ_CENTIMETRE, &SQ_MILLIMETRE, &SQ_MICROMETRE,
&HECTARE, &SQ_KILOMETRE, &SQ_YARD, &SQ_FOOT,
&SQ_INCH, &ACRE, &SQ_MILE, &SQ_NAUTICAL_MILE
]
}

#[cfg(test)]
mod tests {
use crate::assert_near;
Expand Down
18 changes: 12 additions & 6 deletions src/conversions/energy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use crate::conversions::{Dimension, System, Unit};

// Energy unit constants
pub const JOULE: Unit = Unit {
name: "joule",
name: "Joule",
dimension: Dimension::Energy,
system: System::Metric,
to_base: None,
Expand All @@ -33,7 +33,7 @@ pub const JOULE: Unit = Unit {
from_system_base: None,
};
pub const KILOJOULE: Unit = Unit {
name: "kilojoule",
name: "Kilojoule",
dimension: Dimension::Energy,
system: System::Metric,
to_base: Some(Unit::from_kilo),
Expand All @@ -42,7 +42,7 @@ pub const KILOJOULE: Unit = Unit {
from_system_base: None,
};
pub const MEGAJOULE: Unit = Unit {
name: "megajoule",
name: "Megajoule",
dimension: Dimension::Energy,
system: System::Metric,
to_base: Some(Unit::from_mega),
Expand All @@ -51,7 +51,7 @@ pub const MEGAJOULE: Unit = Unit {
from_system_base: None,
};
pub const GIGAJOULE: Unit = Unit {
name: "gigajoule",
name: "Gigajoule",
dimension: Dimension::Energy,
system: System::Metric,
to_base: Some(Unit::from_giga),
Expand All @@ -62,7 +62,7 @@ pub const GIGAJOULE: Unit = Unit {

// Imperial units
pub const BRITISH_THERMAL_UNIT: Unit = Unit {
name: "british_thermal_unit",
name: "British thermal unit",
dimension: Dimension::Energy,
system: System::Imperial,
to_base: Some(|v| v * 1055.05585262),
Expand All @@ -71,7 +71,7 @@ pub const BRITISH_THERMAL_UNIT: Unit = Unit {
from_system_base: None,
};
pub const CALORIE: Unit = Unit {
name: "calorie",
name: "Calorie",
dimension: Dimension::Energy,
system: System::Imperial,
to_base: Some(|v| v * 4.184),
Expand All @@ -80,6 +80,12 @@ pub const CALORIE: Unit = Unit {
from_system_base: None,
};

pub(crate) fn get_all() -> Vec<&'static Unit> {
vec![&JOULE, &KILOJOULE, &MEGAJOULE, &GIGAJOULE,
&BRITISH_THERMAL_UNIT, &CALORIE,
]
}

#[cfg(test)]
mod tests {
use crate::assert_near;
Expand Down
18 changes: 12 additions & 6 deletions src/conversions/force.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use crate::conversions::{Dimension, System, Unit};

// Force unit constants
pub const NEWTON: Unit = Unit {
name: "newton",
name: "Newton",
dimension: Dimension::Force,
system: System::Metric,
to_base: None,
Expand All @@ -33,7 +33,7 @@ pub const NEWTON: Unit = Unit {
from_system_base: None,
};
pub const KILONEWTON: Unit = Unit {
name: "kilonewton",
name: "Kilonewton",
dimension: Dimension::Force,
system: System::Metric,
to_base: Some(Unit::from_kilo),
Expand All @@ -42,7 +42,7 @@ pub const KILONEWTON: Unit = Unit {
from_system_base: None,
};
pub const MEGANEWTON: Unit = Unit {
name: "meganewton",
name: "Meganewton",
dimension: Dimension::Force,
system: System::Metric,
to_base: Some(Unit::from_mega),
Expand All @@ -51,7 +51,7 @@ pub const MEGANEWTON: Unit = Unit {
from_system_base: None,
};
pub const GIGANEWTON: Unit = Unit {
name: "giganewton",
name: "Giganewton",
dimension: Dimension::Force,
system: System::Metric,
to_base: Some(Unit::from_giga),
Expand All @@ -62,7 +62,7 @@ pub const GIGANEWTON: Unit = Unit {

// Imperial units
pub const POUND_FORCE: Unit = Unit {
name: "pound_force",
name: "Pound",
dimension: Dimension::Force,
system: System::Imperial,
to_base: Some(|v| v * 4.4482216152605),
Expand All @@ -71,7 +71,7 @@ pub const POUND_FORCE: Unit = Unit {
from_system_base: None,
};
pub const OUNCE_FORCE: Unit = Unit {
name: "ounce_force",
name: "Ounce",
dimension: Dimension::Force,
system: System::Imperial,
to_base: Some(|v| v * 0.278013851),
Expand All @@ -80,6 +80,12 @@ pub const OUNCE_FORCE: Unit = Unit {
from_system_base: Some(|v| v * 16.0),
};

pub(crate) fn get_all() -> Vec<&'static Unit> {
vec![&NEWTON, &KILONEWTON, &MEGANEWTON, &GIGANEWTON,
&POUND_FORCE, &OUNCE_FORCE,
]
}

#[cfg(test)]
mod tests {
use crate::assert_near;
Expand Down
Loading

0 comments on commit 1d06944

Please sign in to comment.