pub struct Schema {Show 20 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 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.
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 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.