1
- use super :: schema:: { Context , Method , Service } ;
1
+ use super :: schema:: { Method , Service } ;
2
2
use crate :: { generate_doc_comments, naive_snake_case} ;
3
3
use proc_macro2:: TokenStream ;
4
4
use quote:: { format_ident, quote} ;
5
5
6
6
/// Generate service for client
7
- pub fn generate < ' a , T : Service < ' a > > ( service : & ' a T , context : & T :: Context ) -> TokenStream {
7
+ pub fn generate < T : Service > ( service : & T , proto_path : & str ) -> TokenStream {
8
8
let service_ident = quote:: format_ident!( "{}Client" , service. name( ) ) ;
9
9
let client_mod = quote:: format_ident!( "{}_client" , naive_snake_case( & service. name( ) ) ) ;
10
- let methods = generate_methods ( service, context ) ;
10
+ let methods = generate_methods ( service, proto_path ) ;
11
11
12
12
let connect = generate_connect ( & service_ident) ;
13
13
let service_doc = generate_doc_comments ( service. comment ( ) ) ;
@@ -76,7 +76,7 @@ fn generate_connect(_service_ident: &syn::Ident) -> TokenStream {
76
76
TokenStream :: new ( )
77
77
}
78
78
79
- fn generate_methods < ' a , T : Service < ' a > > ( service : & ' a T , context : & T :: Context ) -> TokenStream {
79
+ fn generate_methods < T : Service > ( service : & T , proto_path : & str ) -> TokenStream {
80
80
let mut stream = TokenStream :: new ( ) ;
81
81
82
82
for method in service. methods ( ) {
@@ -92,10 +92,10 @@ fn generate_methods<'a, T: Service<'a>>(service: &'a T, context: &T::Context) ->
92
92
stream. extend ( generate_doc_comments ( method. comment ( ) ) ) ;
93
93
94
94
let method = match ( method. client_streaming ( ) , method. server_streaming ( ) ) {
95
- ( false , false ) => generate_unary ( method, & context , path) ,
96
- ( false , true ) => generate_server_streaming ( method, & context , path) ,
97
- ( true , false ) => generate_client_streaming ( method, & context , path) ,
98
- ( true , true ) => generate_streaming ( method, & context , path) ,
95
+ ( false , false ) => generate_unary ( method, proto_path , path) ,
96
+ ( false , true ) => generate_server_streaming ( method, proto_path , path) ,
97
+ ( true , false ) => generate_client_streaming ( method, proto_path , path) ,
98
+ ( true , true ) => generate_streaming ( method, proto_path , path) ,
99
99
} ;
100
100
101
101
stream. extend ( method) ;
@@ -104,14 +104,10 @@ fn generate_methods<'a, T: Service<'a>>(service: &'a T, context: &T::Context) ->
104
104
stream
105
105
}
106
106
107
- fn generate_unary < ' a , T : Method < ' a > > (
108
- method : & T ,
109
- context : & T :: Context ,
110
- path : String ,
111
- ) -> TokenStream {
112
- let codec_name = syn:: parse_str :: < syn:: Path > ( context. codec_name ( ) ) . unwrap ( ) ;
107
+ fn generate_unary < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
108
+ let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
113
109
let ident = format_ident ! ( "{}" , method. name( ) ) ;
114
- let ( request, response) = method. request_response_name ( context ) ;
110
+ let ( request, response) = method. request_response_name ( proto_path ) ;
115
111
116
112
quote ! {
117
113
pub async fn #ident(
@@ -128,15 +124,11 @@ fn generate_unary<'a, T: Method<'a>>(
128
124
}
129
125
}
130
126
131
- fn generate_server_streaming < ' a , T : Method < ' a > > (
132
- method : & T ,
133
- context : & T :: Context ,
134
- path : String ,
135
- ) -> TokenStream {
136
- let codec_name = syn:: parse_str :: < syn:: Path > ( context. codec_name ( ) ) . unwrap ( ) ;
127
+ fn generate_server_streaming < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
128
+ let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
137
129
let ident = format_ident ! ( "{}" , method. name( ) ) ;
138
130
139
- let ( request, response) = method. request_response_name ( context ) ;
131
+ let ( request, response) = method. request_response_name ( proto_path ) ;
140
132
141
133
quote ! {
142
134
pub async fn #ident(
@@ -153,15 +145,11 @@ fn generate_server_streaming<'a, T: Method<'a>>(
153
145
}
154
146
}
155
147
156
- fn generate_client_streaming < ' a , T : Method < ' a > > (
157
- method : & T ,
158
- context : & T :: Context ,
159
- path : String ,
160
- ) -> TokenStream {
161
- let codec_name = syn:: parse_str :: < syn:: Path > ( context. codec_name ( ) ) . unwrap ( ) ;
148
+ fn generate_client_streaming < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
149
+ let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
162
150
let ident = format_ident ! ( "{}" , method. name( ) ) ;
163
151
164
- let ( request, response) = method. request_response_name ( context ) ;
152
+ let ( request, response) = method. request_response_name ( proto_path ) ;
165
153
166
154
quote ! {
167
155
pub async fn #ident(
@@ -178,15 +166,11 @@ fn generate_client_streaming<'a, T: Method<'a>>(
178
166
}
179
167
}
180
168
181
- fn generate_streaming < ' a , T : Method < ' a > > (
182
- method : & T ,
183
- context : & T :: Context ,
184
- path : String ,
185
- ) -> TokenStream {
186
- let codec_name = syn:: parse_str :: < syn:: Path > ( context. codec_name ( ) ) . unwrap ( ) ;
169
+ fn generate_streaming < T : Method > ( method : & T , proto_path : & str , path : String ) -> TokenStream {
170
+ let codec_name = syn:: parse_str :: < syn:: Path > ( T :: CODEC_PATH ) . unwrap ( ) ;
187
171
let ident = format_ident ! ( "{}" , method. name( ) ) ;
188
172
189
- let ( request, response) = method. request_response_name ( context ) ;
173
+ let ( request, response) = method. request_response_name ( proto_path ) ;
190
174
191
175
quote ! {
192
176
pub async fn #ident(
0 commit comments