use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct AircraftProfile {
pub cruise_tas_kt: f64,
pub climb_rate_fpm: f64,
pub climb_tas_kt: f64,
pub descent_rate_fpm: f64,
pub descent_tas_kt: f64,
pub cruise_burn_per_hour: f64,
pub taxi_fuel: f64,
pub fuel_capacity: f64,
pub reserve_minutes: f64,
}
impl AircraftProfile {
#[must_use]
pub fn climb_hours(&self, from_ft: f64, to_ft: f64) -> f64 {
if self.climb_rate_fpm <= 0.0 || to_ft <= from_ft {
return 0.0;
}
(to_ft - from_ft) / self.climb_rate_fpm / 60.0
}
#[must_use]
pub fn descent_hours(&self, from_ft: f64, to_ft: f64) -> f64 {
if self.descent_rate_fpm <= 0.0 || from_ft <= to_ft {
return 0.0;
}
(from_ft - to_ft) / self.descent_rate_fpm / 60.0
}
#[must_use]
pub fn reserve_fuel(&self) -> f64 {
self.cruise_burn_per_hour * self.reserve_minutes / 60.0
}
}