use crate::Float;
use core::fmt::Debug;
pub trait FloatOption<F: Float>: Clone + Debug + Send + Sync + 'static {
fn to_option(&self) -> Option<F>;
}
impl<F> FloatOption<F> for F
where
F: Float + Debug + Send + Sync + 'static,
{
fn to_option(&self) -> Option<F> {
if self.is_nan() { None } else { Some(*self) }
}
}
impl<F> FloatOption<F> for Option<F>
where
F: Float + Debug + Send + Sync + 'static,
{
fn to_option(&self) -> Option<F> {
self.and_then(|value| if value.is_nan() { None } else { Some(value) })
}
}