@@ -53,97 +53,8 @@ impl specta::Type for MessageDiscriminant {
5353 }
5454}
5555
56- #[ cfg( test) ]
57- mod test {
58- use super :: * ;
59- use std:: io:: Write ;
60-
61- #[ test]
62- fn generate_message_tree ( ) {
63- let result = Message :: build_message_tree ( ) ;
64- let mut file = std:: fs:: File :: create ( "../hierarchical_message_system_tree.txt" ) . unwrap ( ) ;
65- file. write_all ( format ! ( "{} `{}`\n " , result. name( ) , result. path( ) ) . as_bytes ( ) ) . unwrap ( ) ;
66- if let Some ( variants) = result. variants ( ) {
67- for ( i, variant) in variants. iter ( ) . enumerate ( ) {
68- let is_last = i == variants. len ( ) - 1 ;
69- print_tree_node ( variant, "" , is_last, & mut file) ;
70- }
71- }
72- }
73-
74- fn print_tree_node ( tree : & DebugMessageTree , prefix : & str , is_last : bool , file : & mut std:: fs:: File ) {
75- // Print the current node
76- let ( branch, child_prefix) = if tree. message_handler_data_fields ( ) . is_some ( ) || tree. message_handler_fields ( ) . is_some ( ) {
77- ( "├── " , format ! ( "{prefix}│ " ) )
78- } else if is_last {
79- ( "└── " , format ! ( "{prefix} " ) )
80- } else {
81- ( "├── " , format ! ( "{prefix}│ " ) )
82- } ;
83-
84- if tree. path ( ) . is_empty ( ) {
85- file. write_all ( format ! ( "{}{}{}\n " , prefix, branch, tree. name( ) ) . as_bytes ( ) ) . unwrap ( ) ;
86- } else {
87- file. write_all ( format ! ( "{}{}{} `{}`\n " , prefix, branch, tree. name( ) , tree. path( ) ) . as_bytes ( ) ) . unwrap ( ) ;
88- }
89-
90- // Print children if any
91- if let Some ( variants) = tree. variants ( ) {
92- let len = variants. len ( ) ;
93- for ( i, variant) in variants. iter ( ) . enumerate ( ) {
94- let is_last_child = i == len - 1 ;
95- print_tree_node ( variant, & child_prefix, is_last_child, file) ;
96- }
97- }
98-
99- // Print message field if any
100- if let Some ( fields) = tree. fields ( ) {
101- let len = fields. len ( ) ;
102- for ( i, field) in fields. iter ( ) . enumerate ( ) {
103- let is_last_field = i == len - 1 ;
104- let branch = if is_last_field { "└── " } else { "├── " } ;
105-
106- file. write_all ( format ! ( "{child_prefix}{branch}{field}\n " ) . as_bytes ( ) ) . unwrap ( ) ;
107- }
108- }
109-
110- // Print handler field if any
111- if let Some ( data) = tree. message_handler_fields ( ) {
112- let len = data. fields ( ) . len ( ) ;
113- let ( branch, child_prefix) = if tree. message_handler_data_fields ( ) . is_some ( ) {
114- ( "├── " , format ! ( "{prefix}│ " ) )
115- } else {
116- ( "└── " , format ! ( "{prefix} " ) )
117- } ;
118-
119- const FRONTEND_MESSAGE_STR : & str = "FrontendMessage" ;
120- if data. name ( ) . is_empty ( ) && tree. name ( ) != FRONTEND_MESSAGE_STR {
121- panic ! ( "{}'s MessageHandler is missing #[message_handler_data]" , tree. name( ) ) ;
122- } else if tree. name ( ) != FRONTEND_MESSAGE_STR {
123- file. write_all ( format ! ( "{}{}{} `{}`\n " , prefix, branch, data. name( ) , data. path( ) ) . as_bytes ( ) ) . unwrap ( ) ;
124-
125- for ( i, field) in data. fields ( ) . iter ( ) . enumerate ( ) {
126- let is_last_field = i == len - 1 ;
127- let branch = if is_last_field { "└── " } else { "├── " } ;
128-
129- file. write_all ( format ! ( "{}{}{}\n " , child_prefix, branch, field. 0 ) . as_bytes ( ) ) . unwrap ( ) ;
130- }
131- }
132- }
133-
134- // Print data field if any
135- if let Some ( data) = tree. message_handler_data_fields ( ) {
136- let len = data. fields ( ) . len ( ) ;
137- if data. path ( ) . is_empty ( ) {
138- file. write_all ( format ! ( "{}{}{}\n " , prefix, "└── " , data. name( ) ) . as_bytes ( ) ) . unwrap ( ) ;
139- } else {
140- file. write_all ( format ! ( "{}{}{} `{}`\n " , prefix, "└── " , data. name( ) , data. path( ) ) . as_bytes ( ) ) . unwrap ( ) ;
141- }
142- for ( i, field) in data. fields ( ) . iter ( ) . enumerate ( ) {
143- let is_last_field = i == len - 1 ;
144- let branch = if is_last_field { "└── " } else { "├── " } ;
145- file. write_all ( format ! ( "{}{}{}\n " , format!( "{} " , prefix) , branch, field. 0 ) . as_bytes ( ) ) . unwrap ( ) ;
146- }
147- }
56+ impl Message {
57+ pub fn message_tree ( ) -> DebugMessageTree {
58+ Self :: build_message_tree ( )
14859 }
14960}
0 commit comments