Skip to main content

SchemaGraph

Struct SchemaGraph 

Source
pub struct SchemaGraph { /* private fields */ }
Expand description

Case-insensitive lookup over a parsed schema’s declarations.

EXPRESS identifiers are case-insensitive, and Part 21 records conventionally spell entity names in upper case (MYENTITY) while schema sources spell them in mixed case (MyEntity). Every lookup here folds case so callers can pass whichever spelling they hold.

Implementations§

Source§

impl SchemaGraph

Source

pub fn new(parsed: ParsedSchema) -> Self

Indexes a parsed schema for querying.

Source

pub fn from_express(source: &str) -> Self

Parses EXPRESS source and indexes it in one step.

Source

pub fn name(&self) -> &str

The declared schema name.

Source

pub fn entity_count(&self) -> usize

How many entity declarations the schema holds.

Source

pub fn type_count(&self) -> usize

How many type declarations the schema holds.

Source

pub fn entity(&self, name: &str) -> Option<&EntityDef>

The entity declaration for name, if the schema declares one.

Source

pub fn type_def(&self, name: &str) -> Option<&TypeDef>

The type declaration for name, if the schema declares one.

Source

pub fn entity_names(&self) -> impl Iterator<Item = &str>

Every entity name the schema declares, in unspecified order.

Callers needing determinism must sort: the underlying map order is deliberately not promised.

Source

pub fn is_a(&self, name: &str, ancestor: &str) -> bool

Whether name is ancestor, or inherits from it.

Reflexive for declared entities, matching EXPRESS subtype semantics where a type belongs to its own subtype set. An entity the schema never declares is not a subtype of anything, including itself – otherwise a typo would silently satisfy every check made against it.

Source

pub fn supertypes(&self, name: &str) -> Vec<&str>

The supertype chain above name, nearest parent first.

Excludes name itself. Bounded by a fixed depth limit so a malformed cyclic schema terminates instead of hanging.

Source

pub fn attributes(&self, name: &str) -> Vec<&Attribute>

Every attribute slot in Part 21 positional order, inherited first.

See the module documentation for why this ordering is load-bearing.

Derived redeclarations are included: they keep their inherited position and are written * in a Part 21 record. Use EntityDef::is_derived on the owning entity to tell them apart.

Source

pub fn attribute_names(&self, name: &str) -> Vec<&str>

Attribute names in positional order.

The bridge a positional-to-named mapping needs: slot i is called names[i].

Source

pub fn resolve_defined(&self, name: &str) -> String

Resolves a defined type to the base it ultimately aliases.

A chain such as PositiveCount -> Count -> INTEGER resolves to INTEGER. Returns the final right-hand side; for a declaration that is not an alias, that is the type’s own name. Bounded like the supertype walk so a cyclic alias cannot hang.

The right-hand side is returned verbatim, including any aggregate syntax (LIST [1:?] OF X): discarding it here would throw away the aggregate fact entirely, and callers that want the base scalar can match on the text they receive.

Trait Implementations§

Source§

impl Clone for SchemaGraph

Source§

fn clone(&self) -> SchemaGraph

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SchemaGraph

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.