1 use valuable
::{NamedValues, Valuable, Value, Visit}
;
6 fn indent(&self) -> Print
{
7 Print(format
!("{} ", self.0))
11 impl Visit
for Print
{
12 fn visit_value(&mut self, value
: Value
<'_
>) {
14 Value
::Structable(v
) => {
15 let def
= v
.definition();
16 // Print the struct name
17 println
!("{}{}:", self.0, def
.name());
20 let mut visit
= self.indent();
23 Value
::Enumerable(v
) => {
24 let def
= v
.definition();
25 let variant
= v
.variant();
26 // Print the enum name
27 println
!("{}{}::{}:", self.0, def
.name(), variant
.name());
30 let mut visit
= self.indent();
33 Value
::Listable(v
) => {
34 println
!("{}", self.0);
37 let mut visit
= self.indent();
40 Value
::Mappable(v
) => {
41 println
!("{}", self.0);
44 let mut visit
= self.indent();
47 // Primitive or unknown type, just render Debug
48 v
=> println
!("{:?}", v
),
52 fn visit_named_fields(&mut self, named_values
: &NamedValues
<'_
>) {
53 for (field
, value
) in named_values
{
54 print
!("{}- {}: ", self.0, field
.name());
59 fn visit_unnamed_fields(&mut self, values
: &[Value
<'_
>]) {
61 print
!("{}- ", self.0);
66 fn visit_entry(&mut self, key
: Value
<'_
>, value
: Value
<'_
>) {
67 print
!("{}- {:?}: ", self.0, key
);
76 addresses
: Vec
<Address
>,
88 name
: "Angela Ashton".to_string(),
92 street
: "123 1st Ave".to_string(),
93 city
: "Townsville".to_string(),
94 zip
: "12345".to_string(),
97 street
: "555 Main St.".to_string(),
98 city
: "New Old Town".to_string(),
99 zip
: "55555".to_string(),
104 let mut print
= Print("".to_string());
105 valuable
::visit(&person
, &mut print
);