use const_fn::const_fn;
#[derive(Debug)]
pub enum FromStrError {
ParseFloatError(core::num::ParseFloatError),
InvalidNumber(InvalidNumber),
}
impl core::fmt::Display for FromStrError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::ParseFloatError(e) => write!(f, "{e}"),
Self::InvalidNumber(e) => write!(f, "{e}"),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for FromStrError {}
#[cfg(feature = "serde")]
use serde::Serialize;
#[derive(Debug, Eq, PartialEq)]
pub enum InvalidNumber {
NaN,
Zero,
Negative,
Positive,
Infinite,
}
impl core::fmt::Display for InvalidNumber {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::NaN => write!(f, "Number is NaN"),
Self::Zero => write!(f, "Number is zero"),
Self::Negative => write!(f, "Number is negative"),
Self::Positive => write!(f, "Number is positive"),
Self::Infinite => write!(f, "Number is infinite"),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for InvalidNumber {}
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct NonNaN<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct NonZeroNonNaN<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct NonNaNFinite<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct NonZeroNonNaNFinite<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct Positive<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct Negative<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct PositiveFinite<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct NegativeFinite<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct StrictlyPositive<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct StrictlyNegative<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct StrictlyPositiveFinite<T = f64>(T);
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, Copy, Clone)]
#[repr(transparent)]
pub struct StrictlyNegativeFinite<T = f64>(T);
use crate::traits::{Max, Min};
#[cfg(any(feature = "std", feature = "libm"))]
use crate::traits::{Atan2, Copysign, DivEuclid, Hypot, Powf};
#[rustversion::since(1.85)]
use crate::traits::Midpoint;
#[cfg(all(feature = "libm", not(feature = "std")))]
#[allow(unused_imports)]
use num_traits::Float;
mod accept;
mod f32;
mod f64;
mod impls;
typed_floats_macros::generate_floats!();