aphyn_reflection/
refl_repr.rs1use std::fmt::Debug;
2
3#[derive(Clone)]
6pub enum ReflRepr {
7 Struct(ReflReprStruct),
8 Enum(ReflReprEnum),
9 Primitive(ReflReprPrimitive),
10}
11
12#[derive(Clone)]
13pub enum ReflReprPrimitive {
14 Int(i128),
15 Float(f64),
16 Char(char),
17 Str(String),
18 Bool(bool),
19 Unit,
20}
21
22#[derive(Clone)]
23pub struct ReflReprStruct {
24 pub name: String,
25 pub fields: ReflReprFields,
26}
27
28#[derive(Clone)]
29pub enum ReflReprFields {
30 Unit,
31 Tuple(Vec<ReflRepr>),
32 Named(Vec<(String, ReflRepr)>),
33}
34
35#[derive(Clone)]
36pub struct ReflReprEnum {
37 pub name: String,
38 pub variant: String,
39 pub fields: ReflReprFields,
40}
41
42impl Debug for ReflRepr {
43 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44 match self {
45 ReflRepr::Struct(repr) => {
46 write!(f, "{} {:?}", &repr.name, &repr.fields)?;
47 }
48 ReflRepr::Enum(repr) => {
49 write!(f, "{}::{} {:?}", &repr.name, &repr.variant, &repr.fields)?;
50 }
51 ReflRepr::Primitive(repr) => match repr {
52 ReflReprPrimitive::Int(repr) => write!(f, "{}", repr)?,
53 ReflReprPrimitive::Float(repr) => write!(f, "{}", repr)?,
54 ReflReprPrimitive::Char(repr) => write!(f, "'{}'", repr)?,
55 ReflReprPrimitive::Str(repr) => write!(f, "\"{}\"", repr)?,
56 ReflReprPrimitive::Bool(repr) => write!(f, "{}", repr)?,
57 ReflReprPrimitive::Unit => write!(f, "()")?,
58 },
59 }
60
61 Ok(())
62 }
63}
64
65impl Debug for ReflReprFields {
66 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
67 match self {
68 ReflReprFields::Unit => (),
69 ReflReprFields::Tuple(fields) => {
70 write!(f, "(")?;
71 for (i, field_repr) in fields.iter().enumerate() {
72 write!(f, "{:?}", field_repr)?;
73 if i < fields.len() - 1 {
74 write!(f, ", ")?;
75 }
76 }
77 write!(f, ")")?;
78 }
79 ReflReprFields::Named(fields) => {
80 write!(f, "{{ ")?;
81 for (i, (field_name, field_repr)) in fields.iter().enumerate() {
82 write!(f, "{}: {:?}", field_name, field_repr)?;
83 if i < fields.len() - 1 {
84 write!(f, ", ")?;
85 }
86 }
87 write!(f, " }}")?;
88 }
89 }
90
91 Ok(())
92 }
93}
94
95