1
- use super :: rustpython_path_derive;
2
1
use proc_macro2:: TokenStream as TokenStream2 ;
3
2
use quote:: quote;
4
3
use syn:: { Attribute , Data , DeriveInput , Expr , Field , Fields , Ident , Lit , Meta , NestedMeta } ;
@@ -109,7 +108,7 @@ impl ArgAttribute {
109
108
}
110
109
}
111
110
112
- fn generate_field ( field : & Field , rp_path : & syn :: Path ) -> TokenStream2 {
111
+ fn generate_field ( field : & Field ) -> TokenStream2 {
113
112
let mut pyarg_attrs = field
114
113
. attrs
115
114
. iter ( )
@@ -132,24 +131,24 @@ fn generate_field(field: &Field, rp_path: &syn::Path) -> TokenStream2 {
132
131
133
132
let name = & field. ident ;
134
133
let middle = quote ! {
135
- . map( |x| #rp_path :: pyobject:: TryFromObject :: try_from_object( vm, x) ) . transpose( ) ?
134
+ . map( |x| :: rustpython_vm :: pyobject:: TryFromObject :: try_from_object( vm, x) ) . transpose( ) ?
136
135
} ;
137
136
let ending = if let Some ( default) = attr. default {
138
137
quote ! {
139
138
. unwrap_or_else( || #default )
140
139
}
141
140
} else if attr. optional {
142
141
quote ! {
143
- . map( #rp_path :: function:: OptionalArg :: Present )
144
- . unwrap_or( #rp_path :: function:: OptionalArg :: Missing )
142
+ . map( :: rustpython_vm :: function:: OptionalArg :: Present )
143
+ . unwrap_or( :: rustpython_vm :: function:: OptionalArg :: Missing )
145
144
}
146
145
} else {
147
146
let err = match attr. kind {
148
147
ParameterKind :: PositionalOnly | ParameterKind :: PositionalOrKeyword => quote ! {
149
- #rp_path :: function:: ArgumentError :: TooFewArgs
148
+ :: rustpython_vm :: function:: ArgumentError :: TooFewArgs
150
149
} ,
151
150
ParameterKind :: KeywordOnly => quote ! {
152
- #rp_path :: function:: ArgumentError :: RequiredKeywordArgument ( tringify!( #name) )
151
+ :: rustpython_vm :: function:: ArgumentError :: RequiredKeywordArgument ( tringify!( #name) )
153
152
} ,
154
153
} ;
155
154
quote ! {
@@ -177,14 +176,10 @@ fn generate_field(field: &Field, rp_path: &syn::Path) -> TokenStream2 {
177
176
}
178
177
179
178
pub fn impl_from_args ( input : DeriveInput ) -> TokenStream2 {
180
- let rp_path = rustpython_path_derive ( & input) ;
181
179
let fields = match input. data {
182
180
Data :: Struct ( ref data) => {
183
181
match data. fields {
184
- Fields :: Named ( ref fields) => fields
185
- . named
186
- . iter ( )
187
- . map ( |field| generate_field ( field, & rp_path) ) ,
182
+ Fields :: Named ( ref fields) => fields. named . iter ( ) . map ( generate_field) ,
188
183
Fields :: Unnamed ( _) | Fields :: Unit => unimplemented ! ( ) , // TODO: better error message
189
184
}
190
185
}
@@ -193,11 +188,11 @@ pub fn impl_from_args(input: DeriveInput) -> TokenStream2 {
193
188
194
189
let name = & input. ident ;
195
190
quote ! {
196
- impl #rp_path :: function:: FromArgs for #name {
191
+ impl :: rustpython_vm :: function:: FromArgs for #name {
197
192
fn from_args(
198
- vm: & #rp_path :: VirtualMachine ,
199
- args: & mut #rp_path :: function:: PyFuncArgs
200
- ) -> Result <Self , #rp_path :: function:: ArgumentError > {
193
+ vm: & :: rustpython_vm :: VirtualMachine ,
194
+ args: & mut :: rustpython_vm :: function:: PyFuncArgs
195
+ ) -> Result <Self , :: rustpython_vm :: function:: ArgumentError > {
201
196
Ok ( #name { #( #fields) * } )
202
197
}
203
198
}
0 commit comments