use super::{super::annotate::*, macros::*};
use {
depiction::*,
duplicate::*,
ordered_float::*,
std::{fmt, io},
};
impl_normal! {
Float(OrderedFloat<f64>)
}
impl_normal_basic!(Float);
impl<AnnotatedT> Depict for Float<AnnotatedT> {
fn depict<WriteT>(&self, writer: &mut WriteT, context: &DepictionContext) -> io::Result<()>
where
WriteT: io::Write,
{
context.separate(writer)?;
if context.get_format() == DepictionFormat::Compact {
write!(writer, "{}", context.theme.number(format!("{:?}", self.inner)))
} else {
write!(writer, "{} {}", context.theme.number(self.inner), context.theme.meta("f64"))
}
}
}
impl<AnnotatedT> fmt::Display for Float<AnnotatedT> {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(formatter, "{}f64", self.inner)
}
}
#[duplicate_item(
FromT;
[f64];
[f32];
)]
impl<AnnotatedT> From<FromT> for Float<AnnotatedT>
where
AnnotatedT: Default,
{
fn from(float: FromT) -> Self {
let float: OrderedFloat<_> = (float as f64).into();
Self::from(float)
}
}
impl<AnnotatedT> From<Float<AnnotatedT>> for f64 {
fn from(float: Float<AnnotatedT>) -> Self {
float.inner.into()
}
}
impl<AnnotatedT> From<&Float<AnnotatedT>> for f64 {
fn from(float: &Float<AnnotatedT>) -> Self {
float.inner.into()
}
}