use super::{LVar, Val};
use std::fmt::Debug;
use std::rc::Rc;
pub trait IntoVal<T: Debug> {
fn into_val(self) -> Val<T>;
}
impl<T: Debug> IntoVal<T> for T {
fn into_val(self) -> Val<T> {
Val::Resolved(Rc::new(self))
}
}
impl<T: Debug> IntoVal<T> for Val<T> {
fn into_val(self) -> Val<T> {
self
}
}
impl<T: Debug> IntoVal<T> for &Val<T> {
fn into_val(self) -> Val<T> {
self.clone()
}
}
impl<T: Clone + Debug> IntoVal<T> for &T {
fn into_val(self) -> Val<T> {
Val::Resolved(Rc::new(self.clone()))
}
}
impl<T: Debug> IntoVal<T> for LVar<T> {
fn into_val(self) -> Val<T> {
Val::Var(self)
}
}
impl<T: Debug> IntoVal<T> for &LVar<T> {
fn into_val(self) -> Val<T> {
Val::Var(*self)
}
}