use std::fmt::Debug;
use dicetest::hint;
use crate::Eval;
#[derive(Clone, Copy)]
pub struct Elem<'a, S: Debug> {
pub name: &'a str,
value: S,
}
impl<'a, S: Debug> Elem<'a, S> {
pub fn new(name: &'a str, value: S) -> Self {
Self { name, value }
}
pub fn eval(self) -> Eval<&'a str, S> {
hint!("{} = {:?}", self.name, self.value);
Eval {
label: self.name,
value: self.value,
}
}
pub fn as_ref(&self) -> Elem<'_, &S> {
Elem::new(self.name, &self.value)
}
}
impl<'a, S: Debug> Elem<'a, &S> {
pub fn cloned(self) -> Elem<'a, S>
where
S: Clone,
{
Elem::new(self.name, self.value.clone())
}
pub fn copied(self) -> Elem<'a, S>
where
S: Copy,
{
Elem::new(self.name, *self.value)
}
}