use supernovas_ffi::{
RefractionModel, novas_optical_refraction, novas_radio_refraction, novas_standard_refraction,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub enum Refraction {
#[default]
None,
Standard,
Optical,
Radio,
}
impl Refraction {
pub(crate) fn to_sys(self) -> RefractionModel {
match self {
Refraction::None => None,
Refraction::Standard => Some(novas_standard_refraction),
Refraction::Optical => Some(novas_optical_refraction),
Refraction::Radio => Some(novas_radio_refraction),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn all_variants_produce_a_model() {
assert!(Refraction::None.to_sys().is_none());
assert!(Refraction::Standard.to_sys().is_some());
assert!(Refraction::Optical.to_sys().is_some());
assert!(Refraction::Radio.to_sys().is_some());
}
#[test]
fn default_is_none() {
assert_eq!(Refraction::default(), Refraction::None);
}
}