Skip to content

Commit e395f40

Browse files
committed
editoast: move simulation_run_time to SimulationResponse
Signed-off-by: hamz2a <[email protected]>
1 parent 3012e7b commit e395f40

File tree

2 files changed

+28
-45
lines changed

2 files changed

+28
-45
lines changed

editoast/src/core/simulation.rs

+11
Original file line numberDiff line numberDiff line change
@@ -348,3 +348,14 @@ impl AsCoreRequest<Json<SimulationResponse>> for SimulationRequest {
348348
Some(self.infra)
349349
}
350350
}
351+
352+
impl SimulationResponse {
353+
pub fn simulation_run_time(self) -> Result<u64, Box<SimulationResponse>> {
354+
match self {
355+
SimulationResponse::Success { provisional, .. } => {
356+
Ok(*provisional.times.last().expect("empty simulation result"))
357+
}
358+
err => Err(Box::from(err)),
359+
}
360+
}
361+
}

editoast/src/views/timetable/stdcm.rs

+17-45
Original file line numberDiff line numberDiff line change
@@ -236,24 +236,21 @@ async fn stdcm(
236236

237237
// 2. Compute the earliest start time, maximum running time and maximum departure delay
238238
// Simulation time without stop duration
239-
let (
240-
simulation_run_time,
241-
virtual_train_schedule,
242-
virtual_train_sim_result,
243-
virtual_train_pathfinding_result,
244-
) = simulate_train_run(
245-
db_pool.clone(),
246-
valkey_client.clone(),
247-
core_client.clone(),
248-
&stdcm_request,
249-
&infra,
250-
&rolling_stock,
251-
timetable_id,
252-
)
253-
.await?;
254-
let simulation_run_time = match simulation_run_time {
255-
SimulationTimeResult::SimulationTime { value } => value,
256-
SimulationTimeResult::Error { error } => {
239+
let (virtual_train_schedule, virtual_train_sim_result, virtual_train_pathfinding_result) =
240+
simulate_train_run(
241+
db_pool.clone(),
242+
valkey_client.clone(),
243+
core_client.clone(),
244+
&stdcm_request,
245+
&infra,
246+
&rolling_stock,
247+
timetable_id,
248+
)
249+
.await?;
250+
251+
let simulation_run_time = match virtual_train_sim_result.clone().simulation_run_time() {
252+
Ok(value) => value,
253+
Err(error) => {
257254
return Ok(Json(STDCMResponse::PreprocessingSimulationError {
258255
error: *error,
259256
}))
@@ -579,7 +576,6 @@ fn get_earliest_step_tolerance_window(data: &STDCMRequestPayload) -> u64 {
579576
}
580577

581578
/// Returns a `Result` containing:
582-
/// * `SimulationTimeResult` - The result of the simulation time calculation.
583579
/// * `TrainSchedule` - The generated train schedule based on the provided data.
584580
/// * `SimulationResponse` - Simulation response.
585581
/// * `PathfindingResult` - Pathfinding result.
@@ -591,12 +587,7 @@ async fn simulate_train_run(
591587
infra: &Infra,
592588
rolling_stock: &RollingStockModel,
593589
timetable_id: i64,
594-
) -> Result<(
595-
SimulationTimeResult,
596-
TrainSchedule,
597-
SimulationResponse,
598-
PathfindingResult,
599-
)> {
590+
) -> Result<(TrainSchedule, SimulationResponse, PathfindingResult)> {
600591
// Doesn't matter for now, but eventually it will affect tmp speed limits
601592
let approx_start_time = get_earliest_step_time(data);
602593

@@ -638,20 +629,7 @@ async fn simulate_train_run(
638629
)
639630
.await?;
640631

641-
let simulation_run_time = match sim_result.clone() {
642-
SimulationResponse::Success { provisional, .. } => SimulationTimeResult::SimulationTime {
643-
value: *provisional.times.last().expect("empty simulation result"),
644-
},
645-
err => SimulationTimeResult::Error {
646-
error: Box::from(err),
647-
},
648-
};
649-
Ok((
650-
simulation_run_time,
651-
train_schedule,
652-
sim_result,
653-
pathfinding_result,
654-
))
632+
Ok((train_schedule, sim_result, pathfinding_result))
655633
}
656634

657635
/// Returns the request's total stop time
@@ -803,12 +781,6 @@ async fn parse_stdcm_steps(
803781
.collect())
804782
}
805783

806-
#[derive(Debug)]
807-
enum SimulationTimeResult {
808-
SimulationTime { value: u64 },
809-
Error { error: Box<SimulationResponse> },
810-
}
811-
812784
#[cfg(test)]
813785
mod tests {
814786
use axum::http::StatusCode;

0 commit comments

Comments
 (0)