@@ -24,26 +24,29 @@ impl<'a> CaseTreeExt for reflection::Case<'a> {
2424 }
2525}
2626
27- type CaseTreeInner = termtree:: Tree < Box < dyn fmt :: Display + Send + Sync > > ;
27+ type CaseTreeInner = termtree:: Tree < Displayable > ;
2828
2929fn convert ( case : & reflection:: Case < ' _ > ) -> CaseTreeInner {
3030 let mut leaves: Vec < CaseTreeInner > = vec ! [ ] ;
3131
3232 leaves. extend ( case. predicate ( ) . iter ( ) . flat_map ( |pred| {
3333 pred. parameters ( ) . map ( |item| {
34- let root: Box < dyn fmt :: Display + Send + Sync > = Box :: new ( item. to_string ( ) ) ;
34+ let root = Displayable :: new ( & item) ;
3535 termtree:: Tree :: new ( root) . with_multiline ( true )
3636 } )
3737 } ) ) ;
3838
3939 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) ;
4141 termtree:: Tree :: new ( root) . with_multiline ( true )
4242 } ) ) ;
4343
4444 leaves. extend ( case. children ( ) . map ( convert) ) ;
4545
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 ( ) ;
4750 CaseTreeInner :: new ( root) . with_leaves ( leaves)
4851}
4952
@@ -56,3 +59,27 @@ impl fmt::Display for CaseTree {
5659 self . 0 . fmt ( f)
5760 }
5861}
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