(item: &syn::Item)
| 605 | } |
| 606 | |
| 607 | pub(crate) fn pyclass_ident_and_attrs(item: &syn::Item) -> Result<(&Ident, &[Attribute])> { |
| 608 | use syn::Item::*; |
| 609 | Ok(match item { |
| 610 | Struct(syn::ItemStruct { ident, attrs, .. }) => (ident, attrs), |
| 611 | Enum(syn::ItemEnum { ident, attrs, .. }) => (ident, attrs), |
| 612 | Use(item_use) => ( |
| 613 | iter_use_idents(item_use, |ident, _is_unique| Ok(ident))? |
| 614 | .into_iter() |
| 615 | .exactly_one() |
| 616 | .map_err(|_| { |
| 617 | err_span!( |
| 618 | item_use, |
| 619 | "#[pyclass] can only be on single name use statement", |
| 620 | ) |
| 621 | })?, |
| 622 | &item_use.attrs, |
| 623 | ), |
| 624 | other => { |
| 625 | bail_span!( |
| 626 | other, |
| 627 | "#[pyclass] can only be on a struct, enum or use declaration", |
| 628 | ) |
| 629 | } |
| 630 | }) |
| 631 | } |
| 632 | |
| 633 | pub(crate) fn pyexception_ident_and_attrs(item: &syn::Item) -> Result<(&Ident, &[Attribute])> { |
| 634 | use syn::Item::*; |
no test coverage detected