@@ -7,10 +7,15 @@ use quote::{format_ident, quote};
77///
88/// This takes some `Service` and will generate a `TokenStream` that contains
99/// a public module with the generated client.
10- pub fn generate < T : Service > ( service : & T , emit_package : bool , proto_path : & str ) -> TokenStream {
10+ pub fn generate < T : Service > (
11+ service : & T ,
12+ emit_package : bool ,
13+ proto_path : & str ,
14+ compile_well_known_types : bool ,
15+ ) -> TokenStream {
1116 let service_ident = quote:: format_ident!( "{}Client" , service. name( ) ) ;
1217 let client_mod = quote:: format_ident!( "{}_client" , naive_snake_case( & service. name( ) ) ) ;
13- let methods = generate_methods ( service, emit_package, proto_path) ;
18+ let methods = generate_methods ( service, emit_package, proto_path, compile_well_known_types ) ;
1419
1520 let connect = generate_connect ( & service_ident) ;
1621 let service_doc = generate_doc_comments ( service. comment ( ) ) ;
@@ -87,7 +92,12 @@ fn generate_connect(_service_ident: &syn::Ident) -> TokenStream {
8792 TokenStream :: new ( )
8893}
8994
90- fn generate_methods < T : Service > ( service : & T , emit_package : bool , proto_path : & str ) -> TokenStream {
95+ fn generate_methods < T : Service > (
96+ service : & T ,
97+ emit_package : bool ,
98+ proto_path : & str ,
99+ compile_well_known_types : bool ,
100+ ) -> TokenStream {
91101 let mut stream = TokenStream :: new ( ) ;
92102 let package = if emit_package { service. package ( ) } else { "" } ;
93103
@@ -103,10 +113,14 @@ fn generate_methods<T: Service>(service: &T, emit_package: bool, proto_path: &st
103113 stream. extend ( generate_doc_comments ( method. comment ( ) ) ) ;
104114
105115 let method = match ( method. client_streaming ( ) , method. server_streaming ( ) ) {
106- ( false , false ) => generate_unary ( method, proto_path, path) ,
107- ( false , true ) => generate_server_streaming ( method, proto_path, path) ,
108- ( true , false ) => generate_client_streaming ( method, proto_path, path) ,
109- ( true , true ) => generate_streaming ( method, proto_path, path) ,
116+ ( false , false ) => generate_unary ( method, proto_path, compile_well_known_types, path) ,
117+ ( false , true ) => {
118+ generate_server_streaming ( method, proto_path, compile_well_known_types, path)
119+ }
120+ ( true , false ) => {
121+ generate_client_streaming ( method, proto_path, compile_well_known_types, path)
122+ }
123+ ( true , true ) => generate_streaming ( method, proto_path, compile_well_known_types, path) ,
110124 } ;
111125
112126 stream. extend ( method) ;
@@ -115,10 +129,15 @@ fn generate_methods<T: Service>(service: &T, emit_package: bool, proto_path: &st
115129 stream
116130}
117131
118- fn generate_unary < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
132+ fn generate_unary < T : Method > (
133+ method : & T ,
134+ proto_path : & str ,
135+ compile_well_known_types : bool ,
136+ path : String ,
137+ ) -> TokenStream {
119138 let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
120139 let ident = format_ident ! ( "{}" , method. name( ) ) ;
121- let ( request, response) = method. request_response_name ( proto_path) ;
140+ let ( request, response) = method. request_response_name ( proto_path, compile_well_known_types ) ;
122141
123142 quote ! {
124143 pub async fn #ident(
@@ -135,11 +154,16 @@ fn generate_unary<T: Method>(method: &T, proto_path: &str, path: String) -> Toke
135154 }
136155}
137156
138- fn generate_server_streaming < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
157+ fn generate_server_streaming < T : Method > (
158+ method : & T ,
159+ proto_path : & str ,
160+ compile_well_known_types : bool ,
161+ path : String ,
162+ ) -> TokenStream {
139163 let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
140164 let ident = format_ident ! ( "{}" , method. name( ) ) ;
141165
142- let ( request, response) = method. request_response_name ( proto_path) ;
166+ let ( request, response) = method. request_response_name ( proto_path, compile_well_known_types ) ;
143167
144168 quote ! {
145169 pub async fn #ident(
@@ -156,11 +180,16 @@ fn generate_server_streaming<T: Method>(method: &T, proto_path: &str, path: Stri
156180 }
157181}
158182
159- fn generate_client_streaming < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
183+ fn generate_client_streaming < T : Method > (
184+ method : & T ,
185+ proto_path : & str ,
186+ compile_well_known_types : bool ,
187+ path : String ,
188+ ) -> TokenStream {
160189 let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
161190 let ident = format_ident ! ( "{}" , method. name( ) ) ;
162191
163- let ( request, response) = method. request_response_name ( proto_path) ;
192+ let ( request, response) = method. request_response_name ( proto_path, compile_well_known_types ) ;
164193
165194 quote ! {
166195 pub async fn #ident(
@@ -177,11 +206,16 @@ fn generate_client_streaming<T: Method>(method: &T, proto_path: &str, path: Stri
177206 }
178207}
179208
180- fn generate_streaming < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
209+ fn generate_streaming < T : Method > (
210+ method : & T ,
211+ proto_path : & str ,
212+ compile_well_known_types : bool ,
213+ path : String ,
214+ ) -> TokenStream {
181215 let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
182216 let ident = format_ident ! ( "{}" , method. name( ) ) ;
183217
184- let ( request, response) = method. request_response_name ( proto_path) ;
218+ let ( request, response) = method. request_response_name ( proto_path, compile_well_known_types ) ;
185219
186220 quote ! {
187221 pub async fn #ident(
0 commit comments