use crate::{Value, ValueResult};
pub trait Valueable:
std::fmt::Debug
+ std::fmt::Display
+ Clone
+ Eq
+ PartialEq
+ PartialOrd
+ std::hash::Hash
+ std::ops::Add
+ std::ops::Sub
+ std::ops::Mul
+ std::ops::Div
+ std::ops::Rem
+ num_traits::Pow<Self>
{
fn is_truthy(&self) -> ValueResult<bool, Self>;
fn to_int(&self) -> ValueResult<i32, Self>;
fn to_float(&self) -> ValueResult<f32, Self>;
fn display_numerical(&self) -> ValueResult<String, Self>;
}
pub trait ToValue<T: Valueable> {
fn to_value(&self) -> &Value<T>;
}
impl<T:
ToValue<T>
+ From<Value<T>>
+ Clone
+ Eq
+ PartialEq
+ PartialOrd
+ std::fmt::Debug
+ std::fmt::Display
+ std::hash::Hash
+ std::ops::Add
+ std::ops::Sub
+ std::ops::Mul
+ std::ops::Div
+ std::ops::Rem
+ num_traits::Pow<T>>
Valueable for T {
fn is_truthy(&self) -> ValueResult<bool, Self> {
Ok(self.to_value().is_truthy()?)
}
fn to_int(&self) -> ValueResult<i32, Self> {
Ok(self.to_value().to_int()?)
}
fn to_float(&self) -> ValueResult<f32, Self> {
Ok(self.to_value().to_float()?)
}
fn display_numerical(&self) -> ValueResult<String, Self> {
Ok(self.to_value().display_numerical()?)
}
}