@@ -205,23 +205,30 @@ fn generate_param_type(
205205) -> TokenStream2 {
206206 if let Some ( override_type) = param_type_override {
207207 let type_str: String = override_type. to_string ( ) ;
208- let param_type: ParameterType = ParameterType :: from ( type_str. as_str ( ) ) ;
208+ let type_str_normalized: String = type_str. replace ( ' ' , "" ) ;
209+ let param_type: ParameterType = ParameterType :: from ( type_str_normalized. as_str ( ) ) ;
209210 match param_type {
210- ParameterType :: AsRef => {
211- quote ! { impl #override_type }
212- }
213- ParameterType :: Into => {
214- quote ! { impl #override_type }
215- }
216- ParameterType :: AsMut => {
217- quote ! { impl #override_type }
218- }
219- ParameterType :: Deref => {
220- quote ! { impl #override_type }
211+ ParameterType :: AsRef
212+ | ParameterType :: Into
213+ | ParameterType :: AsMut
214+ | ParameterType :: Deref => {
215+ if let Ok ( parsed_type) = parse2 :: < Type > ( override_type. clone ( ) ) {
216+ quote ! { impl #parsed_type }
217+ } else {
218+ let type_tokens: TokenStream2 = override_type. clone ( ) ;
219+ quote ! { impl #type_tokens }
220+ }
221221 }
222222 ParameterType :: Direct => override_type. clone ( ) ,
223223 ParameterType :: Custom ( custom_tokens) => {
224- quote ! { impl #custom_tokens }
224+ let custom_tokens_stream: TokenStream2 = custom_tokens
225+ . parse ( )
226+ . unwrap_or_else ( |_| override_type. clone ( ) ) ;
227+ if let Ok ( parsed_type) = parse2 :: < Type > ( custom_tokens_stream. clone ( ) ) {
228+ quote ! { impl #parsed_type }
229+ } else {
230+ quote ! { impl #custom_tokens_stream }
231+ }
225232 }
226233 }
227234 } else {
@@ -245,7 +252,8 @@ fn generate_assignment(
245252) -> TokenStream2 {
246253 if let Some ( override_type) = param_type_override {
247254 let type_str: String = override_type. to_string ( ) ;
248- let param_type: ParameterType = ParameterType :: from ( type_str. as_str ( ) ) ;
255+ let type_str_normalized: String = type_str. replace ( ' ' , "" ) ;
256+ let param_type: ParameterType = ParameterType :: from ( type_str_normalized. as_str ( ) ) ;
249257 match param_type {
250258 ParameterType :: AsRef => {
251259 quote ! { self . #field_ident = val. as_ref( ) . to_owned( ) ; }
@@ -281,7 +289,8 @@ fn generate_assignment_tuple(
281289) -> TokenStream2 {
282290 if let Some ( override_type) = param_type_override {
283291 let type_str: String = override_type. to_string ( ) ;
284- let param_type: ParameterType = ParameterType :: from ( type_str. as_str ( ) ) ;
292+ let type_str_normalized: String = type_str. replace ( ' ' , "" ) ;
293+ let param_type: ParameterType = ParameterType :: from ( type_str_normalized. as_str ( ) ) ;
285294 match param_type {
286295 ParameterType :: AsRef => {
287296 quote ! { self . #field_index = val. as_ref( ) . to_owned( ) ; }
0 commit comments