1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::{
any::{Any, TypeId},
fmt::Debug,
};
pub trait VariableData: Debug {
fn boxed(&self) -> Box<dyn VariableData>;
fn boxed_any(&self) -> Box<dyn Any>;
fn type_id(&self) -> TypeId;
fn type_name(&self) -> &'static str;
}
impl<T: 'static> VariableData for T
where
T: Clone + Debug,
{
fn boxed(&self) -> Box<dyn VariableData> {
Box::new(self.clone())
}
fn boxed_any(&self) -> Box<dyn Any> {
Box::new(self.clone())
}
fn type_id(&self) -> TypeId {
Any::type_id(self)
}
fn type_name(&self) -> &'static str {
std::any::type_name::<T>()
}
}