only accept `#[pytraverse(skip)]` for now
(attr: &Attribute)
| 11 | |
| 12 | /// only accept `#[pytraverse(skip)]` for now |
| 13 | fn pytraverse_arg(attr: &Attribute) -> Option<Result<TraverseAttr>> { |
| 14 | if !attr.path().is_ident(ATTR_TRAVERSE) { |
| 15 | return None; |
| 16 | } |
| 17 | let ret = || { |
| 18 | let mut skip = false; |
| 19 | attr.parse_nested_meta(|meta| { |
| 20 | if meta.path.is_ident("skip") { |
| 21 | if skip { |
| 22 | return Err(meta.error("already specified skip")); |
| 23 | } |
| 24 | skip = true; |
| 25 | } else { |
| 26 | return Err(meta.error("unknown attr")); |
| 27 | } |
| 28 | Ok(()) |
| 29 | })?; |
| 30 | Ok(TraverseAttr { skip }) |
| 31 | }; |
| 32 | Some(ret()) |
| 33 | } |
| 34 | |
| 35 | fn field_to_traverse_code(field: &Field) -> Result<TokenStream> { |
| 36 | let pytraverse_attrs = field |