use crate::{error::NumeraResult, number::traits::*};
pub type NoNumber = ();
#[rustfmt::skip]
impl Number for NoNumber {
type InnerRepr = NoNumber;
type InnermostRepr = NoNumber;
#[inline]
fn from_inner_repr(value: NoNumber) -> NumeraResult<Self> { Ok(value) }
#[inline]
#[cfg(not(feature = "safe"))]
#[cfg_attr(feature = "nightly", doc(cfg(feature = "not(safe)")))]
unsafe fn from_inner_repr_unchecked(value: NoNumber) -> Self { value }
#[inline]
fn try_from_inner_repr(_value: impl Into<Self::InnerRepr>) -> NumeraResult<Self> { Ok(()) }
#[inline]
fn from_innermost_repr(value: NoNumber) -> NumeraResult<Self> { Ok(value) }
#[inline]
#[cfg(not(feature = "safe"))]
#[cfg_attr(feature = "nightly", doc(cfg(feature = "not(safe)")))]
unsafe fn from_innermost_repr_unchecked(value: NoNumber) -> Self { value }
#[inline]
fn into_inner_repr(self) -> Self::InnerRepr { self }
#[inline]
fn into_innermost_repr(self) -> Self::InnermostRepr { self }
}
#[rustfmt::skip]
impl Bound for NoNumber {
#[inline]
fn is_lower_bounded(&self) -> bool { true }
#[inline]
fn is_upper_bounded(&self) -> bool { true }
#[inline]
fn lower_bound(&self) -> Option<Self> { Some(()) }
#[inline]
fn upper_bound(&self) -> Option<Self> { Some(()) }
}
impl LowerBounded for NoNumber {
#[inline]
fn new_min() -> Self {}
}
impl UpperBounded for NoNumber {
#[inline]
fn new_max() -> Self {}
}
impl ConstLowerBounded for NoNumber {
const MIN: NoNumber = ();
}
impl ConstUpperBounded for NoNumber {
const MAX: NoNumber = ();
}
impl NonLowerBounded for NoNumber {}
impl NonUpperBounded for NoNumber {}
#[rustfmt::skip]
impl Count for NoNumber {
#[inline]
fn is_countable(&self) -> bool { false }
}
#[rustfmt::skip]
impl Countable for NoNumber {
#[inline]
fn next(&self) -> NumeraResult<Self> { Ok(()) }
#[inline]
fn previous(&self) -> NumeraResult<Self> { Ok(()) }
}
impl Uncountable for NoNumber {}
#[rustfmt::skip]
impl Ident for NoNumber {
#[inline]
fn can_zero(&self) -> bool { false }
#[inline]
fn can_one(&self) -> bool { false }
#[inline]
fn can_neg_one(&self) -> bool { false }
#[inline]
fn is_zero(&self) -> bool { false }
#[inline]
fn is_one(&self) -> bool { false }
#[inline]
fn is_neg_one(&self) -> bool { false }
}
impl NonZero for NoNumber {}
impl ConstOne for NoNumber {
const ONE: NoNumber = ();
}
impl ConstZero for NoNumber {
const ZERO: NoNumber = ();
}
impl ConstNegOne for NoNumber {
const NEG_ONE: NoNumber = ();
}
impl One for NoNumber {
#[inline]
fn new_one() -> Self {}
#[inline]
fn set_one(&mut self) {}
}
impl Zero for NoNumber {
#[inline]
fn new_zero() -> Self {}
#[inline]
fn set_zero(&mut self) {}
}
impl NegOne for NoNumber {
#[inline]
fn new_neg_one() -> Self {}
#[inline]
fn set_neg_one(&mut self) {}
}
#[rustfmt::skip]
impl Sign for NoNumber {
#[inline]
fn can_positive(&self) -> bool { false }
#[inline]
fn can_negative(&self) -> bool { false }
#[inline]
fn is_positive(&self) -> bool { false }
#[inline]
fn is_negative(&self) -> bool { false }
}
impl Positive for NoNumber {}
impl Negative for NoNumber {}
impl NonNegative for NoNumber {}
#[rustfmt::skip]
impl NonPositive for NoNumber {
type InnerRepr = NoNumber;
#[inline]
fn new_neg(value: Self::InnerRepr) -> NumeraResult<Self::InnerRepr> { Ok(value) }
}