tgraph 0.2.2

A simple terminal graphing library
Documentation
pub trait AsF64 {
  fn as_f64(self) -> f64;
  fn from_f64(v: f64) -> Self;
}

macro_rules! impl_asf64 {
  ($type:ty) => {
    impl AsF64 for $type {
      fn as_f64(self) -> f64 {
        self as f64
      }
      fn from_f64(v: f64) -> $type {
        v.round() as $type
      }
    }
  };
}

impl_asf64!(u8);
impl_asf64!(u16);
impl_asf64!(u32);
impl_asf64!(u64);
impl_asf64!(u128);
impl_asf64!(i8);
impl_asf64!(i16);
impl_asf64!(i32);
impl_asf64!(i64);
impl_asf64!(i128);

impl AsF64 for f32 {
  fn as_f64(self) -> f64 {
    self as f64
  }

  fn from_f64(v: f64) -> f32 {
    v as f32
  }
}

impl AsF64 for f64 {
  fn as_f64(self) -> f64 {
    self
  }

  fn from_f64(v: f64) -> f64 {
    v
  }
}

pub trait MaybeAsF64 {
  fn maybe_as_f64(self) -> Option<f64>;
}

impl<T> MaybeAsF64 for T
where
  T: AsF64,
{
  fn maybe_as_f64(self) -> Option<f64> {
    Some(self.as_f64())
  }
}

impl<T> MaybeAsF64 for Option<T>
where
  T: AsF64,
{
  fn maybe_as_f64(self) -> Option<f64> {
    self.map(|v| v.as_f64())
  }
}