@@ -3,8 +3,10 @@ mod r#gen {
33 include ! ( concat!( env!( "OUT_DIR" ) , "/proto_service_a_gen.rs" ) ) ;
44 include ! ( concat!( env!( "OUT_DIR" ) , "/proto_service_b_gen.rs" ) ) ;
55 include ! ( concat!( env!( "OUT_DIR" ) , "/proto_service_c_gen.rs" ) ) ;
6+ include ! ( concat!( env!( "OUT_DIR" ) , "/descriptor_gen.rs" ) ) ;
67}
78
9+ pub use descriptor_gen:: descriptor;
810pub use r#gen:: * ;
911pub use proto_service_a_gen:: * ;
1012pub use proto_service_b_gen:: * ;
@@ -14,7 +16,7 @@ pub use proto_service_c_gen::*;
1416mod tests {
1517 use pilota:: {
1618 LinkedBytes ,
17- pb:: { EncodeLengthContext , Message , descriptor_getter:: ItemDescriptorGetter } ,
19+ pb:: { EncodeLengthContext , Message , descriptor_getter:: * } ,
1820 } ;
1921
2022 use super :: * ;
@@ -55,8 +57,6 @@ mod tests {
5557 let minimal_request = service_c:: MinimalRequest :: decode ( buf. concat ( ) . freeze ( ) )
5658 . expect ( "decode to service C failed" ) ;
5759
58- println ! ( "Minimal Request: {:?}" , minimal_request) ;
59-
6060 assert_eq ! ( minimal_request. request_id, "req-123" ) ;
6161 assert_eq ! ( minimal_request. user_id, "user-456" ) ;
6262 assert_eq ! ( minimal_request. field_c, "data_for_c" ) ;
@@ -190,20 +190,58 @@ mod tests {
190190
191191 #[ test]
192192 fn test_get_descriptor_proto ( ) {
193- let desc = service_a:: FullRequest :: get_descriptor_proto ( ) . unwrap ( ) ;
194- assert_eq ! ( desc. name( ) , "FullRequest" ) ;
195-
196- // nested oneof
197- let nested_oneof_desc =
198- service_a:: full_request:: NestedOneof :: get_descriptor_proto ( ) . unwrap ( ) ;
199- assert_eq ! ( nested_oneof_desc. name( ) , "nested_oneof" ) ;
200-
201- // unused message should not be generated
202- let file_desc = service_a:: file_descriptor_proto_service_a ( ) ;
203- assert ! (
204- file_desc
205- . get_message_descriptor_proto( "NotNeeded" )
206- . is_none( )
207- ) ;
193+ // Test nested message types
194+ let desc = descriptor:: Outer :: get_descriptor_proto ( ) . unwrap ( ) ;
195+ assert_eq ! ( desc. name( ) , "Outer" ) ;
196+ let inner = descriptor:: outer:: Inner :: get_descriptor_proto ( ) . unwrap ( ) ;
197+ assert_eq ! ( inner. name( ) , "Inner" ) ;
198+ let nested = descriptor:: outer:: inner:: Nested :: get_descriptor_proto ( ) . unwrap ( ) ;
199+ assert_eq ! ( nested. name( ) , "Nested" ) ;
200+
201+ // Test top-level message types
202+ let outer_alt = descriptor:: OuterAlt :: get_descriptor_proto ( ) . unwrap ( ) ;
203+ assert_eq ! ( outer_alt. name( ) , "OuterAlt" ) ;
204+ let opt = outer_alt. options . as_ref ( ) . unwrap ( ) ; // should be deprecated
205+ assert_eq ! ( opt. deprecated. unwrap( ) , true ) ;
206+ let service_ref = descriptor:: ServiceReference :: get_descriptor_proto ( ) . unwrap ( ) ;
207+ assert_eq ! ( service_ref. name( ) , "ServiceReference" ) ;
208+ let request = descriptor:: Request :: get_descriptor_proto ( ) . unwrap ( ) ;
209+ assert_eq ! ( request. name( ) , "Request" ) ;
210+ let response = descriptor:: Response :: get_descriptor_proto ( ) . unwrap ( ) ;
211+ assert_eq ! ( response. name( ) , "Response" ) ;
212+ let optioned = descriptor:: OptionedMessage :: get_descriptor_proto ( ) . unwrap ( ) ;
213+ assert_eq ! ( optioned. name( ) , "OptionedMessage" ) ;
214+
215+ // Test enum types
216+ let global_enum = descriptor:: GlobalEnum :: get_descriptor_proto ( ) . unwrap ( ) ;
217+ assert_eq ! ( global_enum. name( ) , "GlobalEnum" ) ;
218+ let state_enum = descriptor:: outer:: inner:: State :: get_descriptor_proto ( ) . unwrap ( ) ;
219+ assert_eq ! ( state_enum. name( ) , "State" ) ;
220+
221+ // Test map types
222+ let map = request. get_field_descriptor_proto ( "by_name" ) . unwrap ( ) ;
223+ assert_eq ! ( map. name( ) , "by_name" ) ;
224+
225+ // Test service types
226+ let file = descriptor:: file_descriptor_proto_descriptor ( ) ;
227+ let service = file. get_service_descriptor_proto ( "ComplexService" ) . unwrap ( ) ;
228+ assert_eq ! ( service. name( ) , "ComplexService" ) ;
229+ for method in & service. method {
230+ match method. name ( ) {
231+ "UnaryGet" => {
232+ assert_eq ! ( method. input_type, Some ( ".descriptor.Request" . into( ) ) ) ;
233+ assert_eq ! ( method. output_type, Some ( ".descriptor.Response" . into( ) ) ) ;
234+ }
235+ "ServerStream" => {
236+ assert_eq ! ( method. input_type, Some ( ".descriptor.Request" . into( ) ) ) ;
237+ assert_eq ! ( method. output_type, Some ( ".descriptor.Response" . into( ) ) ) ;
238+ }
239+ "ClientStream" => {
240+ assert_eq ! ( method. input_type, Some ( ".descriptor.Request" . into( ) ) ) ;
241+ assert_eq ! ( method. output_type, Some ( ".descriptor.Response" . into( ) ) ) ;
242+ }
243+ _ => panic ! ( "unexpected method name {}" , method. name( ) ) ,
244+ }
245+ }
208246 }
209247}
0 commit comments