[derive-backend] Add utils::if_type_is_python
This commit is contained in:
parent
5d85ea7fdc
commit
fc5cdc1031
|
@ -85,16 +85,7 @@ impl<'a> FnSpec<'a> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let py = match ty {
|
let py = crate::utils::if_type_is_python(ty);
|
||||||
syn::Type::Path(syn::TypePath { ref path, .. }) => {
|
|
||||||
if let Some(segment) = path.segments.last() {
|
|
||||||
segment.value().ident == "Python"
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => false,
|
|
||||||
};
|
|
||||||
|
|
||||||
let opt = check_arg_ty_and_optional(name, ty);
|
let opt = check_arg_ty_and_optional(name, ty);
|
||||||
arguments.push(FnArg {
|
arguments.push(FnArg {
|
||||||
|
@ -209,6 +200,11 @@ impl<'a> FnSpec<'a> {
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A FnSpec is valid as getter if it has no argument or has one argument of type `Python`
|
||||||
|
pub fn valid_as_getter(&self) -> bool {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_ref(name: &syn::Ident, ty: &syn::Type) -> bool {
|
pub fn is_ref(name: &syn::Ident, ty: &syn::Type) -> bool {
|
||||||
|
|
|
@ -64,16 +64,7 @@ fn wrap_fn_argument<'a>(input: &'a syn::FnArg, name: &'a Ident) -> Option<method
|
||||||
_ => panic!("unsupported argument: {:?}", cap.pat),
|
_ => panic!("unsupported argument: {:?}", cap.pat),
|
||||||
};
|
};
|
||||||
|
|
||||||
let py = match cap.ty {
|
let py = crate::utils::if_type_is_python(&cap.ty);
|
||||||
syn::Type::Path(ref typath) => typath
|
|
||||||
.path
|
|
||||||
.segments
|
|
||||||
.last()
|
|
||||||
.map(|seg| seg.value().ident == "Python")
|
|
||||||
.unwrap_or(false),
|
|
||||||
_ => false,
|
|
||||||
};
|
|
||||||
|
|
||||||
let opt = method::check_arg_ty_and_optional(&name, &cap.ty);
|
let opt = method::check_arg_ty_and_optional(&name, &cap.ty);
|
||||||
Some(method::FnArg {
|
Some(method::FnArg {
|
||||||
name: ident,
|
name: ident,
|
||||||
|
@ -111,7 +102,7 @@ fn extract_pyfn_attrs(
|
||||||
}
|
}
|
||||||
_ => panic!("The first parameter of pyfn must be a MetaItem"),
|
_ => panic!("The first parameter of pyfn must be a MetaItem"),
|
||||||
}
|
}
|
||||||
// read Python fonction name
|
// read Python function name
|
||||||
match meta[1] {
|
match meta[1] {
|
||||||
syn::NestedMeta::Literal(syn::Lit::Str(ref lits)) => {
|
syn::NestedMeta::Literal(syn::Lit::Str(ref lits)) => {
|
||||||
fnname = Some(syn::Ident::new(&lits.value(), lits.span()));
|
fnname = Some(syn::Ident::new(&lits.value(), lits.span()));
|
||||||
|
|
|
@ -2,12 +2,24 @@
|
||||||
|
|
||||||
use proc_macro2::Span;
|
use proc_macro2::Span;
|
||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
use syn;
|
|
||||||
|
|
||||||
pub fn print_err(msg: String, t: TokenStream) {
|
pub fn print_err(msg: String, t: TokenStream) {
|
||||||
println!("Error: {} in '{}'", msg, t.to_string());
|
println!("Error: {} in '{}'", msg, t.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check if the given type `ty` is `pyo3::Python`.
|
||||||
|
pub fn if_type_is_python(ty: &syn::Type) -> bool {
|
||||||
|
match ty {
|
||||||
|
syn::Type::Path(ref typath) => typath
|
||||||
|
.path
|
||||||
|
.segments
|
||||||
|
.last()
|
||||||
|
.map(|seg| seg.value().ident == "Python")
|
||||||
|
.unwrap_or(false),
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME(althonos): not sure the docstring formatting is on par here.
|
// FIXME(althonos): not sure the docstring formatting is on par here.
|
||||||
pub fn get_doc(attrs: &[syn::Attribute], null_terminated: bool) -> syn::Lit {
|
pub fn get_doc(attrs: &[syn::Attribute], null_terminated: bool) -> syn::Lit {
|
||||||
let mut doc = Vec::new();
|
let mut doc = Vec::new();
|
||||||
|
|
Loading…
Reference in New Issue