use crate::imports::*;
#[serde_api]
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "pyo3", pyclass(module = "altrios", subclass, eq))]
pub struct RailVehicle {
#[serde(alias = "Car Type")]
pub car_type: String,
#[serde(alias = "Freight Type")]
pub freight_type: String,
#[serde(alias = "Length (m)")]
pub length: si::Length,
#[serde(alias = "Axle Count")]
pub axle_count: u8,
#[serde(alias = "Brake Count")]
pub brake_count: u8,
#[serde(alias = "Mass Static Base (kg)")]
pub mass_static_base: si::Mass,
#[serde(alias = "Mass Freight (kg)")]
pub mass_freight: si::Mass,
#[serde(alias = "Speed Max (m/s)")]
pub speed_max: si::Velocity,
#[serde(alias = "Braking Ratio")]
pub braking_ratio: si::Ratio,
#[serde(alias = "Mass Extra per Axle (kg)")]
pub mass_rot_per_axle: si::Mass,
#[serde(alias = "Bearing Res per Axle (N)")]
pub bearing_res_per_axle: si::Force,
#[serde(alias = "Rolling Ratio")]
pub rolling_ratio: si::Ratio,
#[serde(alias = "Davis B (s/m)")]
pub davis_b: si::InverseVelocity,
#[serde(alias = "Cd*A (m^2)")]
pub cd_area: si::Area,
#[serde(alias = "Curve Coefficient 0")]
pub curve_coeff_0: si::Ratio,
#[serde(alias = "Curve Coefficient 1")]
pub curve_coeff_1: si::Ratio,
#[serde(alias = "Curve Coefficient 2")]
pub curve_coeff_2: si::Ratio,
}
#[pyo3_api]
impl RailVehicle {}
impl Init for RailVehicle {}
impl SerdeAPI for RailVehicle {}
impl Mass for RailVehicle {
fn mass(&self) -> anyhow::Result<Option<si::Mass>> {
self.derived_mass()
}
fn set_mass(
&mut self,
_new_mass: Option<si::Mass>,
_side_effect: MassSideEffect,
) -> anyhow::Result<()> {
bail!("`set_mass` is not enabled for `RailVehicle`")
}
fn derived_mass(&self) -> anyhow::Result<Option<si::Mass>> {
Ok(Some(self.mass_static_base + self.mass_freight))
}
fn expunge_mass_fields(&mut self) {}
}