aphyn_reflection/
refl_ty.rs1#[derive(Hash, PartialEq, Eq, PartialOrd, Ord)]
4pub struct ReflTyId(String);
5
6impl ReflTyId {
7 pub fn of<T>() -> Self {
8 Self(String::from(std::any::type_name::<T>()))
10 }
11}
12
13pub enum ReflTy {
14 Struct(ReflTyStruct),
15 Enum(ReflTyEnum),
16 Array(ReflTyId, u64),
17 Slice(ReflTyId),
18}
19
20pub struct ReflTyEnum {
21 pub variants: Vec<(String, ReflTyStruct)>,
22}
23
24pub enum ReflTyStruct {
25 Unit,
26 Tuple(Vec<ReflTyId>),
27 Named(Vec<(String, ReflTyId)>),
28}
29
30struct ExampleStruct {
36 pub age: u8,
37 pub name: String,
38}
39
40fn example_struct_refl_ty() -> ReflTy {
41 ReflTy::Struct(ReflTyStruct::Named(
42 [
43 (String::from("age"), ReflTyId::of::<u8>()),
44 (String::from("name"), ReflTyId::of::<String>()),
45 ]
46 .into_iter()
47 .collect(),
48 ))
49}
50
51enum ExampleEnum {
52 None,
53 Age(u8),
54 Creds { email: String, password: String },
55}
56
57fn example_enum_refl_ty() -> ReflTy {
58 ReflTy::Enum(ReflTyEnum {
59 variants: vec![
60 (String::from("None"), ReflTyStruct::Unit),
61 (String::from("Age"), ReflTyStruct::Tuple(vec![ReflTyId::of::<u8>()])),
62 (
63 String::from("Creds"),
64 ReflTyStruct::Named(vec![
65 (String::from("email"), ReflTyId::of::<String>()),
66 (String::from("password"), ReflTyId::of::<String>()),
67 ]),
68 ),
69 ],
70 })
71}
72
73fn option_enum_refl_ty(t: ReflTyId) -> ReflTy {
74 ReflTy::Enum(ReflTyEnum {
75 variants: vec![
76 (String::from("None"), ReflTyStruct::Unit),
77 (String::from("Age"), ReflTyStruct::Tuple(vec![t])),
78 ],
79 })
80}
81
82fn array_f32_10_refl_ty() -> ReflTy {
83 ReflTy::Array(ReflTyId::of::<f32>(), 10)
84}
85
86fn vec_f32_refl_ty() -> ReflTy {
87 ReflTy::Slice(ReflTyId::of::<f32>())
88}