-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathrolling_stock.rs
90 lines (79 loc) · 3 KB
/
rolling_stock.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
mod effort_curves;
pub use effort_curves::ConditionalEffortCurve;
pub use effort_curves::EffortCurve;
pub use effort_curves::EffortCurveConditions;
pub use effort_curves::EffortCurves;
pub use effort_curves::ModeEffortCurves;
mod rolling_resistance;
pub use rolling_resistance::RollingResistance;
pub use rolling_resistance::RollingResistancePerWeight;
mod energy_source;
pub use energy_source::EnergySource;
pub use energy_source::EnergyStorage;
pub use energy_source::RefillLaw;
pub use energy_source::SpeedDependantPower;
mod supported_signaling_systems;
pub use supported_signaling_systems::RollingStockSupportedSignalingSystems;
mod rolling_stock_metadata;
pub use rolling_stock_metadata::RollingStockMetadata;
mod loading_gauge_type;
pub use loading_gauge_type::LoadingGaugeType;
mod rolling_stock_livery;
pub use rolling_stock_livery::RollingStockLivery;
pub use rolling_stock_livery::RollingStockLiveryMetadata;
mod towed_rolling_stock;
pub use towed_rolling_stock::TowedRollingStock;
use editoast_common::units::*;
use serde::Deserialize;
use serde::Serialize;
use std::collections::HashMap;
editoast_common::schemas! {
effort_curves::schemas(),
energy_source::schemas(),
loading_gauge_type::schemas(),
rolling_stock_metadata::schemas(),
rolling_resistance::schemas(),
rolling_stock_livery::schemas(),
supported_signaling_systems::schemas(),
}
pub const ROLLING_STOCK_RAILJSON_VERSION: &str = "3.2";
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct RollingStock {
pub name: String,
pub locked: bool,
pub effort_curves: EffortCurves,
pub base_power_class: Option<String>,
#[serde(with = "meter")]
pub length: Length,
#[serde(with = "meter_per_second")]
pub max_speed: Velocity,
pub startup_time: f64, // What unit ?
#[serde(with = "meter_per_second_squared")]
pub startup_acceleration: Acceleration,
#[serde(with = "meter_per_second_squared")]
pub comfort_acceleration: Acceleration,
// The constant gamma braking coefficient used when NOT circulating
// under ETCS/ERTMS signaling system in m/s^2
pub const_gamma: f64,
pub inertia_coefficient: f64,
#[serde(with = "kilogram")]
pub mass: Mass,
pub rolling_resistance: RollingResistance,
pub loading_gauge: LoadingGaugeType,
/// Mapping of power restriction code to power class
#[serde(default)]
pub power_restrictions: HashMap<String, String>,
#[serde(default)]
pub energy_sources: Vec<EnergySource>,
/// The time the train takes before actually using electrical power (in seconds).
/// Is null if the train is not electric.
pub electrical_power_startup_time: Option<f64>,
/// The time it takes to raise this train's pantograph in seconds.
/// Is null if the train is not electric.
#[serde(default)]
pub raise_pantograph_time: Option<f64>,
pub supported_signaling_systems: RollingStockSupportedSignalingSystems,
pub railjson_version: String,
#[serde(default)]
pub metadata: Option<RollingStockMetadata>,
}