Skip to main content

zyn_core/ext/
mod.rs

1//! Extension traits for common `syn` AST types.
2//!
3//! Provides ergonomic helpers for working with attributes, metadata, fields,
4//! types, data, and items in procedural macros. Requires the `ext` feature
5//! (`zyn = { features = ["ext"] }`).
6//!
7//! # Overview
8//!
9//! | Trait | Target | Purpose |
10//! |-------|--------|---------|
11//! | [`AttrExt`] | `syn::Attribute` | Name checking, argument parsing, dot-path metadata queries |
12//! | [`MetaExt`] | `syn::Meta` | Variant predicates, conversions, nested navigation |
13//! | [`FieldExt`] | `syn::Field` | Dot-path metadata queries on struct/enum fields |
14//! | [`FieldsExt`] | `syn::Fields`, `syn::ItemStruct`, etc. | Variant predicates and field lookup via [`FieldKey`] |
15//! | [`TypeExt`] | `syn::Type`, `syn::Field` | Detecting `Option`/`Result` wrappers, inner type extraction |
16//! | [`DataExt`] | `syn::Data` | Variant predicates and conversions for struct/enum/union data |
17//! | [`ItemExt`] | `syn::Item` | Variant predicates, conversions, and common field accessors |
18//! | [`VariantExt`] | `syn::Variant` | Dot-path metadata queries on enum variants |
19//!
20//! # Examples
21//!
22//! ```ignore
23//! use zyn::ext::{AttrExt, MetaExt, FieldExt, FieldsExt, FieldKey, TypeExt, DataExt, ItemExt, VariantExt};
24//!
25//! // Attribute querying with dot-paths
26//! if attr.is("serde") {
27//!     let rename = attr.get("rename");
28//! }
29//!
30//! // Field attribute navigation
31//! let meta = field.get("serde.rename");
32//!
33//! // Fields lookup
34//! let key: FieldKey = "id".into();
35//! if let Some(f) = fields.get(&key) {
36//!     // ...
37//! }
38//!
39//! // Type inspection
40//! if field.is_option() {
41//!     let inner = field.inner_type().unwrap();
42//! }
43//!
44//! // Data variant checking
45//! if data.is_enum() {
46//!     let e = data.as_enum().unwrap();
47//! }
48//!
49//! // Item accessors
50//! let ident = item.ident();
51//! let attrs = item.attrs();
52//! ```
53
54mod attr;
55mod data;
56mod field;
57mod fields;
58mod item;
59mod meta;
60mod ty;
61mod variant;
62
63pub use attr::*;
64pub use data::*;
65pub use field::*;
66pub use fields::*;
67pub use item::*;
68pub use meta::*;
69pub use ty::*;
70pub use variant::*;