#![allow(non_upper_case_globals)]
pub mod constants;
pub type Scalar = f64;
pub trait Eval {
fn eval(&self) -> Scalar;
fn new(value: Scalar) -> Self;
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Copy, Clone)]
pub struct Mass {
value: Scalar,
}
impl Eval for Mass {
fn eval(&self) -> Scalar {
self.value
}
fn new(value: Scalar) -> Self {
Self { value: value }
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Copy, Clone)]
pub struct Time {
value: Scalar,
}
impl Eval for Time {
fn eval(&self) -> Scalar {
self.value
}
fn new(value: Scalar) -> Self {
Self { value: value }
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Copy, Clone)]
pub struct Length {
value: Scalar,
}
impl Eval for Length {
fn eval(&self) -> Scalar {
self.value
}
fn new(value: Scalar) -> Self {
Self { value: value }
}
}
impl Length {
pub fn velocity_time(&self, time: Time) -> Velocity {
Velocity { value: self.eval() / time.eval() }
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Copy, Clone)]
pub struct Velocity {
value: Scalar,
}
impl Eval for Velocity {
fn eval(&self) -> Scalar {
self.value
}
fn new(value: Scalar) -> Self {
Self { value: value }
}
}
impl Velocity {
pub fn displacement_time(&self, time: Time) -> Length {
Length { value: self.eval() * time.eval() }
}
pub fn acceleration_time(&self, time: Time) -> Acceleration {
Acceleration { value: self.eval() / time.eval() }
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Copy, Clone)]
pub struct Acceleration {
value: Scalar,
}
impl Eval for Acceleration {
fn eval(&self) -> Scalar {
self.value
}
fn new(value: Scalar) -> Self {
Self { value: value }
}
}
impl Acceleration {
pub fn velocity_time(&self, time: Time) -> Velocity {
Velocity { value: self.eval() * time.eval() }
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Copy, Clone)]
pub struct Force {
value: Scalar,
}
impl Eval for Force {
fn eval(&self) -> Scalar {
self.value
}
fn new(value: Scalar) -> Self {
Self { value: value }
}
}
impl Force {
pub fn acceleration_mass(&self, mass: Mass) -> Acceleration {
Acceleration { value: self.eval() / mass.eval() }
}
}