use replay_core::ReplaySpeed;
pub fn parse_replay_speed(value: Option<String>) -> Result<ReplaySpeed, String> {
let Some(raw) = value else {
return Ok(ReplaySpeed::Instant);
};
match raw.as_str() {
"instant" => Ok(ReplaySpeed::Instant),
"realtime" => Ok(ReplaySpeed::RealTime),
_ => {
let factor = raw
.parse::<f64>()
.map_err(|err| format!("invalid --speed value: {raw} ({err})"))?;
if factor <= 0.0 {
return Err(format!("invalid --speed value: {raw} (must be > 0)"));
}
Ok(ReplaySpeed::Factor(factor))
}
}
}
pub fn replay_speed_label(speed: &ReplaySpeed) -> String {
match speed {
ReplaySpeed::Instant => "instant".to_string(),
ReplaySpeed::RealTime => "realtime".to_string(),
ReplaySpeed::Factor(value) => format!("factor:{value}"),
}
}