(&self)
| 1560 | |
| 1561 | impl GetSetItemMeta { |
| 1562 | fn getset_name(&self) -> Result<(String, GetSetItemKind)> { |
| 1563 | let inner = self.inner(); |
| 1564 | let kind = if inner._bool("setter")? { |
| 1565 | GetSetItemKind::Set |
| 1566 | } else { |
| 1567 | GetSetItemKind::Get |
| 1568 | }; |
| 1569 | let name = inner._optional_str("name")?; |
| 1570 | let py_name = if let Some(name) = name { |
| 1571 | name |
| 1572 | } else { |
| 1573 | let sig_name = inner.item_name(); |
| 1574 | let extract_prefix_name = |prefix, item_typ| { |
| 1575 | if let Some(name) = sig_name.strip_prefix(prefix) { |
| 1576 | if name.is_empty() { |
| 1577 | Err(err_span!( |
| 1578 | inner.meta_ident, |
| 1579 | r#"A #[{}({typ})] fn with a {prefix}* name must \ |
| 1580 | have something after "{prefix}""#, |
| 1581 | inner.meta_name(), |
| 1582 | typ = item_typ, |
| 1583 | prefix = prefix |
| 1584 | )) |
| 1585 | } else { |
| 1586 | Ok(name.to_owned()) |
| 1587 | } |
| 1588 | } else { |
| 1589 | Err(err_span!( |
| 1590 | inner.meta_ident, |
| 1591 | r#"A #[{}(setter)] fn must either have a `name` \ |
| 1592 | parameter or a fn name along the lines of "set_*""#, |
| 1593 | inner.meta_name() |
| 1594 | )) |
| 1595 | } |
| 1596 | }; |
| 1597 | match kind { |
| 1598 | GetSetItemKind::Get => sig_name, |
| 1599 | GetSetItemKind::Set => extract_prefix_name("set_", "setter")?, |
| 1600 | } |
| 1601 | }; |
| 1602 | Ok((py_name, kind)) |
| 1603 | } |
| 1604 | } |
| 1605 | |
| 1606 | struct SlotItemMeta(ItemMetaInner); |
no test coverage detected