unitforge/quantities/
velocity.rs1use crate::impl_macros::macros::*;
2use crate::prelude::*;
3use ndarray::{Array1, Array2, ArrayView1, ArrayView2};
4use num_traits::identities::Zero;
5use num_traits::{Float, FromPrimitive};
6#[cfg(feature = "pyo3")]
7use pyo3::pyclass;
8#[cfg(feature = "serde")]
9use serde::{Deserialize, Serialize};
10use std::cmp::Ordering;
11use std::fmt;
12use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign};
13#[cfg(feature = "strum")]
14use strum_macros::EnumIter;
15
16#[cfg_attr(feature = "strum", derive(EnumIter))]
17#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18#[derive(Copy, Clone, PartialEq, Debug)]
19#[cfg_attr(feature = "pyo3", pyclass(eq, eq_int))]
20pub enum VelocityUnit {
21 km_s,
22 m_s,
23 cm_s,
24 mm_s,
25 km_h,
26}
27
28impl PhysicsUnit for VelocityUnit {
29 fn name(&self) -> &str {
30 match &self {
31 VelocityUnit::km_s => "km/s",
32 VelocityUnit::m_s => "m/s",
33 VelocityUnit::cm_s => "cm/s",
34 VelocityUnit::mm_s => "mm/s",
35 VelocityUnit::km_h => "km/h",
36 }
37 }
38
39 fn base_per_x(&self) -> (f64, i32) {
40 match self {
41 VelocityUnit::km_s => (1., 3),
42 VelocityUnit::m_s => (1., 0),
43 VelocityUnit::cm_s => (1., 2),
44 VelocityUnit::mm_s => (1., 3),
45 VelocityUnit::km_h => (1. / 3.6, 0),
46 }
47 }
48}
49
50impl_const!(Velocity, c, 2.99792458, 8);
51
52impl_quantity!(Velocity, VelocityUnit, [VelocityUnit::m_s]);
53impl_div_with_self_to_f64!(Velocity);