use super::*;
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)]
pub struct Coef<T>
{
pub value: T,
}
impl<T> Coef<T>
{
#[inline(always)]
pub fn new(value: T) -> Self { Self { value } }
}
impl<T> From<T> for Coef<T>
{
fn from(value: T) -> Self { Self::new(value) }
}
impl<T> Default for Coef<T>
where
T: One,
{
fn default() -> Self { Self::new(T::ONE) }
}
map_on_number_and_bool! {
($type_name:tt) => {
#[cfg(feature = "serde")]
impl $crate::serde::Serialize for Coef<$type_name>
{
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: $crate::serde::Serializer,
{
self.value.serialize(serializer)
}
}
#[cfg(feature = "serde")]
impl<'de> $crate::serde::Deserialize<'de> for Coef<$type_name>
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: $crate::serde::Deserializer<'de>,
{
Ok(Self::new($type_name::deserialize(deserializer)?))
}
}
}
}