dimensional_analyser 0.2.0

Runtime dimensional analysis and unit-aware quantities for Rust
Documentation
use dimensional_analyser::{Result, dim, dimension::{DIMENSIONLESS, Dimension, Prefix}, dimensions::le_systeme_international_d_unites::{HOUR, JOULE, LITER, MINUTE, base_units::{KILOGRAM, METER, SECOND}}, quantity::{DimensionalAnalysableQuantity, Quantity}};
fn main() -> Result {
    let height       = Quantity::new(5 , dim!(METER));
    println!("Height:       {height}");
    let mass         = Quantity::new(15, dim!(KILOGRAM));
    println!("Mass:         {mass}");
    let acceleration = Quantity::new(9.81,dim!(METER SECOND^-2));
    println!("Acceleration: {acceleration}");
    let speed        = Quantity::new(20, dim!(METER SECOND^-1));
    println!("Speed:        {speed}");

    let energy = dim!(JOULE);

    let potential_energy = [&height, &mass, &acceleration].convert_to(energy)?;
    println!("Potential energy: {potential_energy}");
    let kinetic_energy = [&mass, &speed].convert_to(energy)? / 2;
    println!("Kinetic energy:   {kinetic_energy}");
    let total_energy = (&potential_energy + &kinetic_energy)?;
    println!("Total energy:     {total_energy}");
    
    let minute = &*MINUTE;
    println!("Minute: {:?}", minute.exponents());
    let _ = Dimension::new("other_letter");
    let _ = Dimension::new("otasdasdher_letter");
    let _ = Dimension::new("otasdasasddher_letter");
    let _ = Dimension::new("otasdasdhdaser_letter");
    let _ = Dimension::new("otasdasdhasdaser_letter");
    let _ = Dimension::new("otasdasdhasdaser_letter");
    let letter = Dimension::new("letter");
    println!("Letter: {:?}", letter.exponents());
    let word = letter.scale(5);
    let typing_speed = Quantity::new(24, dim!(word minute^-1));
    println!("Minute: {:?}", minute.exponents());
    println!("Typing speed: {typing_speed}");

    let dollar = Dimension::new("dollar");
    let money_gained = Quantity::new(40, dim!(dollar));
    let match_duration = Quantity::new(7, dim!(MINUTE));
    println!("Hour: {}", dim!(HOUR));
    println!("Per hour: {}", dim!(HOUR^-1));
    println!("Per hour: {}", dim!(DIMENSIONLESS HOUR^-1));
    println!("Salary: {}", [&money_gained, &match_duration].convert_to(dim!(dollar HOUR^-1))?);
    
    println!("Salary: {}", [&money_gained, &match_duration].convert_to(dim!(METER HOUR^-1)).expect_err("msg"));

    let liter = METER.cube().prefix(&Prefix::Milli);
    println!("Prefix before exponentiation: {}", liter == *LITER);

    Ok(())
}