pub struct Schema {Show 21 fields
pub protocol: String,
pub vertices: HashMap<Name, Vertex>,
pub edges: HashMap<Edge, Name>,
pub hyper_edges: HashMap<Name, HyperEdge>,
pub constraints: HashMap<Name, Vec<Constraint>>,
pub required: HashMap<Name, Vec<Edge>>,
pub nsids: HashMap<Name, Name>,
pub entries: Vec<Name>,
pub variants: HashMap<Name, Vec<Variant>>,
pub orderings: HashMap<Edge, u32>,
pub recursion_points: HashMap<Name, RecursionPoint>,
pub spans: HashMap<Name, Span>,
pub usage_modes: HashMap<Edge, UsageMode>,
pub nominal: HashMap<Name, bool>,
pub coercions: HashMap<(Name, Name), CoercionSpec>,
pub mergers: HashMap<Name, Expr>,
pub defaults: HashMap<Name, Expr>,
pub policies: HashMap<Name, Expr>,
pub outgoing: HashMap<Name, SmallVec<Edge, 4>>,
pub incoming: HashMap<Name, SmallVec<Edge, 4>>,
pub between: HashMap<(Name, Name), SmallVec<Edge, 2>>,
}Expand description
A schema: a model of the protocol’s schema theory.
Contains both the raw data (vertices, edges, constraints, etc.) and precomputed adjacency indices for efficient graph traversal.
Fields§
§protocol: StringThe protocol this schema belongs to.
vertices: HashMap<Name, Vertex>Vertices keyed by their ID.
edges: HashMap<Edge, Name>Edges keyed by the edge itself, value is the edge kind.
hyper_edges: HashMap<Name, HyperEdge>Hyper-edges keyed by their ID.
constraints: HashMap<Name, Vec<Constraint>>Constraints per vertex ID.
required: HashMap<Name, Vec<Edge>>Required edges per vertex ID.
nsids: HashMap<Name, Name>NSID mapping: vertex ID to NSID string.
entries: Vec<Name>Declared entry vertices.
Semantically, this is the finite family of basepoints that makes
the schema a pointed schema: E → Ob(C_S) selecting the sorts
at which the W-algebra of instances may be rooted. Parsers set
this explicitly per their protocol’s notion of a top-level
definition (a record, a top-level type, a path root, etc.);
consumers that need to choose an instance root consult it via
primary_entry.
Empty means the parser declined to supply a pointing; consumers should then either fall back to a deterministic (but non- canonical) selection or report an error. Order is preserved for reproducibility; the set carries no duplicates.
variants: HashMap<Name, Vec<Variant>>Coproduct variants per union vertex ID.
orderings: HashMap<Edge, u32>Edge ordering positions (edge → position index).
recursion_points: HashMap<Name, RecursionPoint>Recursion points (fixpoint markers).
spans: HashMap<Name, Span>Spans connecting pairs of vertices.
usage_modes: HashMap<Edge, UsageMode>Edge usage modes (default: Structural for all).
nominal: HashMap<Name, bool>Whether each vertex uses nominal identity (true) or
structural identity (false). Absent = structural.
coercions: HashMap<(Name, Name), CoercionSpec>Coercion specifications: (source_kind, target_kind) to coercion spec.
mergers: HashMap<Name, Expr>Merger expressions: vertex_id to merger expression.
defaults: HashMap<Name, Expr>Default value expressions: vertex_id to default expression.
policies: HashMap<Name, Expr>Conflict resolution policy expressions: sort_name to policy expression.
outgoing: HashMap<Name, SmallVec<Edge, 4>>Outgoing edges per vertex ID.
incoming: HashMap<Name, SmallVec<Edge, 4>>Incoming edges per vertex ID.
between: HashMap<(Name, Name), SmallVec<Edge, 2>>Edges between a specific (src, tgt) pair.
Implementations§
Source§impl Schema
impl Schema
Sourcepub fn forget_layout(&self) -> Self
pub fn forget_layout(&self) -> Self
Strip every constraint whose sort belongs to the layout
enrichment fibre (per panproto_gat::is_layout_sort).
This is the schema-level forgetful U sending a decorated schema to its abstract base in the parse/decorate/emit lens. Idempotent.
Sourcepub fn forget_layout_in_place(&mut self)
pub fn forget_layout_in_place(&mut self)
In-place variant of Self::forget_layout.
Sourcepub fn is_layout_free(&self) -> bool
pub fn is_layout_free(&self) -> bool
Returns true when no constraint sort belongs to the layout
enrichment fibre. This is the well-formedness predicate for an
AbstractSchema.
Sourcepub fn outgoing_edges(&self, vertex_id: &str) -> &[Edge]
pub fn outgoing_edges(&self, vertex_id: &str) -> &[Edge]
Return all outgoing edges from the given vertex.
Sourcepub fn incoming_edges(&self, vertex_id: &str) -> &[Edge]
pub fn incoming_edges(&self, vertex_id: &str) -> &[Edge]
Return all incoming edges to the given vertex.
Sourcepub fn edges_between(&self, src: &str, tgt: &str) -> &[Edge]
pub fn edges_between(&self, src: &str, tgt: &str) -> &[Edge]
Return edges between a specific (src, tgt) pair.
Sourcepub fn has_vertex(&self, id: &str) -> bool
pub fn has_vertex(&self, id: &str) -> bool
Returns true if the given vertex ID exists in this schema.
Sourcepub fn vertex_count(&self) -> usize
pub fn vertex_count(&self) -> usize
Returns the number of vertices in the schema.
Sourcepub fn edge_count(&self) -> usize
pub fn edge_count(&self) -> usize
Returns the number of edges in the schema.
Sourcepub fn entry_vertices(&self) -> &[Name]
pub fn entry_vertices(&self) -> &[Name]
Return the declared entry vertices.
See Schema::entries for semantics. Use primary_entry for
callers that need a single root and want a deterministic
fallback when no entries are declared.
Sourcepub fn constraints_for(&self, vertex_id: &str) -> &[Constraint]
pub fn constraints_for(&self, vertex_id: &str) -> &[Constraint]
Return every constraint attached to the given vertex.
Tree-sitter-derived schemas attach byte ranges, interstitials,
formatting, and field:<name> entries here.
Sourcepub fn field_text(&self, vertex_id: &str, field_name: &str) -> Option<&str>
pub fn field_text(&self, vertex_id: &str, field_name: &str) -> Option<&str>
Return the text value of a tree-sitter field('<name>', ...)
anonymous-token child on the given vertex, if any.
Tree-sitter rules of the form
field('op', choice('+', '-', '*', '/')) attach a field name to
an unnamed token alternative. The walker emits the token’s text
as a field:<name> constraint on the parent vertex; this is the
supported accessor for that text.
Returns None if no field:<name> constraint exists on
vertex_id. Named-node field children continue to surface as
edges (use outgoing_edges and filter
by Edge::kind for those).
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Schema
impl<'de> Deserialize<'de> for Schema
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for Schema
impl RefUnwindSafe for Schema
impl Send for Schema
impl Sync for Schema
impl Unpin for Schema
impl UnsafeUnpin for Schema
impl UnwindSafe for Schema
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more