@@ -24,26 +24,29 @@ impl<'a> CaseTreeExt for reflection::Case<'a> {
24
24
}
25
25
}
26
26
27
- type CaseTreeInner = termtree:: Tree < Box < dyn fmt :: Display + Send + Sync > > ;
27
+ type CaseTreeInner = termtree:: Tree < Displayable > ;
28
28
29
29
fn convert ( case : & reflection:: Case < ' _ > ) -> CaseTreeInner {
30
30
let mut leaves: Vec < CaseTreeInner > = vec ! [ ] ;
31
31
32
32
leaves. extend ( case. predicate ( ) . iter ( ) . flat_map ( |pred| {
33
33
pred. parameters ( ) . map ( |item| {
34
- let root: Box < dyn fmt :: Display + Send + Sync > = Box :: new ( item. to_string ( ) ) ;
34
+ let root = Displayable :: new ( & item) ;
35
35
termtree:: Tree :: new ( root) . with_multiline ( true )
36
36
} )
37
37
} ) ) ;
38
38
39
39
leaves. extend ( case. products ( ) . map ( |item| {
40
- let root: Box < dyn fmt :: Display + Send + Sync > = Box :: new ( item. to_string ( ) ) ;
40
+ let root = Displayable :: new ( item) ;
41
41
termtree:: Tree :: new ( root) . with_multiline ( true )
42
42
} ) ) ;
43
43
44
44
leaves. extend ( case. children ( ) . map ( convert) ) ;
45
45
46
- let root = Box :: new ( case. predicate ( ) . map ( |p| p. to_string ( ) ) . unwrap_or_default ( ) ) ;
46
+ let root = case
47
+ . predicate ( )
48
+ . map ( |p| Displayable :: new ( & p) )
49
+ . unwrap_or_default ( ) ;
47
50
CaseTreeInner :: new ( root) . with_leaves ( leaves)
48
51
}
49
52
@@ -56,3 +59,27 @@ impl fmt::Display for CaseTree {
56
59
self . 0 . fmt ( f)
57
60
}
58
61
}
62
+
63
+ #[ derive( Default ) ]
64
+ struct Displayable {
65
+ primary : String ,
66
+ alternate : String ,
67
+ }
68
+
69
+ impl Displayable {
70
+ fn new ( display : & dyn std:: fmt:: Display ) -> Self {
71
+ let primary = format ! ( "{}" , display) ;
72
+ let alternate = format ! ( "{:#}" , display) ;
73
+ Self { primary, alternate }
74
+ }
75
+ }
76
+
77
+ impl fmt:: Display for Displayable {
78
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
79
+ if f. alternate ( ) {
80
+ self . alternate . fmt ( f)
81
+ } else {
82
+ self . primary . fmt ( f)
83
+ }
84
+ }
85
+ }
0 commit comments