use std::collections::HashMap;
use crate::_bevy::Resource;
use super::types::AirfoilData;
#[derive(Resource, Default)]
pub struct AirfoilLibrary {
pub(super) map: HashMap<String, AirfoilData>,
}
impl AirfoilLibrary {
pub fn register(&mut self, name: impl Into<String>, data: AirfoilData) {
self.map.insert(name.into(), data);
}
pub fn lookup(&self, name: &str) -> Option<&AirfoilData> {
self.map.get(name)
}
pub fn len(&self) -> usize {
self.map.len()
}
pub fn is_empty(&self) -> bool {
self.map.is_empty()
}
}
#[cfg(test)]
mod tests {
use crate::components::aero_coeff::AeroCoeff;
use super::*;
#[test]
fn register_and_lookup_round_trip() {
let mut lib = AirfoilLibrary::default();
let data = AirfoilData {
cl: AeroCoeff::Scalar(1.0),
cd: AeroCoeff::Scalar(0.02),
cm: AeroCoeff::Absent,
};
lib.register("TestFoil", data.clone());
let found = lib.lookup("TestFoil").expect("should be registered");
assert_eq!(found.cl, data.cl);
assert_eq!(found.cd, data.cd);
}
}