@@ -107,7 +107,7 @@ pub fn derive_iden_static(input: TokenStream) -> TokenStream {
107107 . map ( IdenVariant :: < DeriveIdenStatic > :: try_from)
108108 . collect :: < syn:: Result < Vec < _ > > > ( )
109109 {
110- Ok ( v) => quote ! { # ( #v ) , * } ,
110+ Ok ( v) => v ,
111111 Err ( e) => return e. to_compile_error ( ) . into ( ) ,
112112 } ;
113113
@@ -117,7 +117,7 @@ pub fn derive_iden_static(input: TokenStream) -> TokenStream {
117117 impl #sea_query_path:: IdenStatic for #ident {
118118 fn as_str( & self ) -> & ' static str {
119119 match self {
120- #match_arms
120+ #( # match_arms) , *
121121 }
122122 }
123123 }
@@ -149,7 +149,7 @@ fn get_table_name(ident: &proc_macro2::Ident, attrs: Vec<Attribute>) -> Result<S
149149 Ok ( table_name)
150150}
151151
152- fn must_be_valid_iden ( name : & str ) -> bool {
152+ fn is_static_iden ( name : & str ) -> bool {
153153 // can only begin with [a-z_]
154154 name. chars ( )
155155 . take ( 1 )
@@ -163,24 +163,24 @@ fn impl_iden_for_unit_struct(
163163) -> proc_macro2:: TokenStream {
164164 let sea_query_path = sea_query_path ( ) ;
165165
166- let prepare = if must_be_valid_iden ( table_name) {
166+ if is_static_iden ( table_name) {
167167 quote ! {
168- fn prepare( & self , s: & mut dyn :: std:: fmt:: Write , q: #sea_query_path:: Quote ) {
169- write!( s, "{}" , q. left( ) ) . unwrap( ) ;
170- self . unquoted( s) ;
171- write!( s, "{}" , q. right( ) ) . unwrap( ) ;
168+ impl #sea_query_path:: Iden for #ident {
169+ fn quoted( & self ) -> std:: borrow:: Cow <' static , str > {
170+ std:: borrow:: Cow :: Borrowed ( #table_name)
171+ }
172+
173+ fn unquoted( & self ) -> & str {
174+ #table_name
175+ }
172176 }
173177 }
174178 } else {
175- quote ! { }
176- } ;
177-
178- quote ! {
179- impl #sea_query_path:: Iden for #ident {
180- #prepare
181-
182- fn unquoted( & self , s: & mut dyn :: std:: fmt:: Write ) {
183- write!( s, #table_name) . unwrap( ) ;
179+ quote ! {
180+ impl #sea_query_path:: Iden for #ident {
181+ fn unquoted( & self ) -> & str {
182+ #table_name
183+ }
184184 }
185185 }
186186 }
@@ -196,41 +196,44 @@ where
196196{
197197 let sea_query_path = sea_query_path ( ) ;
198198
199- let mut is_all_valid = true ;
199+ let mut is_all_static_iden = true ;
200200
201201 let match_arms = match variants
202- . map ( |v| ( table_name, v) )
203202 . map ( |v| {
204- let v = IdenVariant :: < DeriveIden > :: try_from ( v ) ?;
205- is_all_valid &= v. must_be_valid_iden ( ) ;
203+ let v = IdenVariant :: < DeriveIden > :: try_from ( ( table_name , v ) ) ?;
204+ is_all_static_iden &= v. is_static_iden ( ) ;
206205 Ok ( v)
207206 } )
208207 . collect :: < syn:: Result < Vec < _ > > > ( )
209208 {
210- Ok ( v) => quote ! { # ( #v ) , * } ,
209+ Ok ( v) => v ,
211210 Err ( e) => return e. to_compile_error ( ) ,
212211 } ;
213212
214- let prepare = if is_all_valid {
213+ if is_all_static_iden {
215214 quote ! {
216- fn prepare( & self , s: & mut dyn :: std:: fmt:: Write , q: #sea_query_path:: Quote ) {
217- write!( s, "{}" , q. left( ) ) . unwrap( ) ;
218- self . unquoted( s) ;
219- write!( s, "{}" , q. right( ) ) . unwrap( ) ;
215+ impl #sea_query_path:: Iden for #ident {
216+ fn quoted( & self ) -> std:: borrow:: Cow <' static , str > {
217+ std:: borrow:: Cow :: Borrowed ( match self {
218+ #( #match_arms) , *
219+ } )
220+ }
221+
222+ fn unquoted( & self ) -> & str {
223+ match self {
224+ #( #match_arms) , *
225+ }
226+ }
220227 }
221228 }
222229 } else {
223- quote ! { }
224- } ;
225-
226- quote ! {
227- impl #sea_query_path:: Iden for #ident {
228- #prepare
229-
230- fn unquoted( & self , s: & mut dyn :: std:: fmt:: Write ) {
231- match self {
232- #match_arms
233- } ;
230+ quote ! {
231+ impl #sea_query_path:: Iden for #ident {
232+ fn unquoted( & self ) -> & str {
233+ match self {
234+ #( #match_arms) , *
235+ }
236+ }
234237 }
235238 }
236239 }
@@ -359,8 +362,8 @@ pub fn enum_def(args: TokenStream, input: TokenStream) -> TokenStream {
359362 }
360363
361364 impl #import_name:: Iden for #enum_name {
362- fn unquoted( & self , s : & mut dyn sea_query :: Write ) {
363- write! ( s , "{}" , <Self as #import_name:: IdenStatic >:: as_str( & self ) ) . unwrap ( ) ;
365+ fn unquoted( & self ) -> & str {
366+ <Self as #import_name:: IdenStatic >:: as_str( & self )
364367 }
365368 }
366369
0 commit comments