File tree Expand file tree Collapse file tree 3 files changed +72
-1
lines changed Expand file tree Collapse file tree 3 files changed +72
-1
lines changed Original file line number Diff line number Diff line change 11target
22Cargo.lock
3+ .vscode
Original file line number Diff line number Diff line change 3535 missing_copy_implementations
3636) ]
3737
38- use std:: fmt:: { self , Debug , Formatter } ;
38+ use std:: fmt:: { self , Debug , Display , Formatter } ;
3939use std:: num:: NonZeroUsize ;
4040
4141/// Vec-backed ID-tree.
@@ -718,3 +718,41 @@ impl<T: Debug> Debug for Tree<T> {
718718 }
719719 }
720720}
721+
722+ impl < T : Display > Display for Tree < T > {
723+ fn fmt ( & self , f : & mut Formatter ) -> Result < ( ) , fmt:: Error > {
724+ use iter:: Edge ;
725+
726+ fn indent ( f : & mut Formatter , level : usize ) -> Result < ( ) , fmt:: Error > {
727+ for _ in 0 ..level {
728+ write ! ( f, " " ) ?;
729+ }
730+ Ok ( ( ) )
731+ }
732+
733+ let mut level: usize = 0 ;
734+
735+ for edge in self . root ( ) . traverse ( ) {
736+ match edge {
737+ Edge :: Open ( node) if node. has_children ( ) => {
738+ indent ( f, level) ?;
739+ write ! ( f, "{}\n " , node. value( ) ) ?;
740+ level += 1 ;
741+ }
742+ Edge :: Open ( node) if node. next_sibling ( ) . is_some ( ) => {
743+ indent ( f, level) ?;
744+ write ! ( f, "{}\n " , node. value( ) ) ?;
745+ }
746+ Edge :: Open ( node) => {
747+ indent ( f, level) ?;
748+ write ! ( f, "{}\n " , node. value( ) ) ?;
749+ }
750+ Edge :: Close ( node) if node. has_children ( ) => {
751+ level -= 1 ;
752+ }
753+ _ => { }
754+ }
755+ }
756+ Ok ( ( ) )
757+ }
758+ }
Original file line number Diff line number Diff line change @@ -156,3 +156,35 @@ fn insert_id_before() {
156156 ) ;
157157 assert_eq ! ( 3 , tree. root( ) . children( ) . count( ) ) ;
158158}
159+
160+ #[ test]
161+ fn test_display ( ) {
162+ let tree = tree ! {
163+ "root" => {
164+ "a" => {
165+ "child 1" ,
166+ } ,
167+ "b" => {
168+ "child 2" ,
169+ } ,
170+ }
171+ } ;
172+
173+ let repr = format ! ( "{tree}" ) ;
174+ let expected = "root\n a\n child 1\n b\n child 2\n " ;
175+
176+ assert_eq ! ( repr, expected) ;
177+
178+ let tree = tree ! {
179+ "root" => {
180+ "a" , "b" => {
181+ "x" , "y"
182+ } , "c"
183+ }
184+ } ;
185+
186+ let repr = format ! ( "{tree}" ) ;
187+ let expected = "root\n a\n b\n x\n y\n c\n " ;
188+
189+ assert_eq ! ( repr, expected) ;
190+ }
You can’t perform that action at this time.
0 commit comments