module

Noir::RustStructFields

Wire names of a Rust source's named-field structs, the way serde and Rocket's FromForm read them (deserr's #[deserr(rename_all = camelCase)] is read like serde's): a container #[serde(rename_all = "…")] recases every field, a field's #[serde(rename = "…")] or Rocket #[field(name = "…")] replaces its name, and skip / skip_deserializing fields are left out. A flatten field's own name is never on the wire: its type's fields are, so its type text is kept in Shape#flattened for the caller to resolve. Tuple and unit structs have no named fields and are omitted, and so are structs of inline mods: a bare name in a file means its top-level item, never mod legacy { struct X }.

No file I/O: callers hand over source text.

Constants

FLATTEN_RE = /\b(?:serde|deserr)\s*\((?:[^()]|\([^()]*\))*\bflatten\b(?!\s*=)/
FORM_NAME_RE = /\bfield\s*\((?:[^()]|\([^()]*\))*\bname\s*=\s*(?:uncased\s*\(\s*)?"([^"]+)"/
OMIT_RE = /\b(?:serde|deserr)\s*\((?:[^()]|\([^()]*\))*\b(?:skip|skip_deserializing)\b(?!\s*=)/
RENAME_ALL_RE = /\b(?:serde|deserr)\s*\((?:[^()]|\([^()]*\))*\brename_all\s*=\s*"?([^",)\s]+)"?/
RENAME_RE = /\b(?:serde|deserr)\s*\((?:[^()]|\([^()]*\))*\brename\s*=\s*"([^"]+)"/

Class methods

parse(source : String) : Hash(String, Shape)

{struct_name => Shape} of the top-level structs; first definition wins.

Source
recase(name : String, rule : String | Nil) : String

serde's rename_all rules applied to a snake_case field name.

Source

Nested types