Skip to main content

TypeRegistry

Struct TypeRegistry 

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

Registry for managing and resolving custom types

Types are organized per document and support inheritance through parent references. The registry handles cycle detection and accumulates overrides through the inheritance chain.

Implementations§

Source§

impl TypeRegistry

Source

pub fn new() -> Self

Create a new, empty registry

Source

pub fn register_type( &mut self, doc: &str, def: TypeDef, ) -> Result<(), LemmaError>

Register a user-defined type for a given document

Source

pub fn resolve_types( &self, doc: &str, ) -> Result<ResolvedDocumentTypes, LemmaError>

Resolve all types for a certain document

Returns fully resolved types for the document, including named types, inline type definitions, and a unit index. After resolution, all imports are inlined - documents are independent. Follows parent chains, accumulates overrides into specifications. Handles cycle detection and cross-document references.

§Errors

Returns an error if a unit appears in multiple types within the same document (ambiguous unit).

Source

pub fn resolve_named_types( &self, doc: &str, ) -> Result<ResolvedDocumentTypes, LemmaError>

Resolve only named types (for validation before inline type definitions are registered)

Source

pub fn resolve_standard_type(&self, name: &str) -> Option<TypeSpecification>

Resolve a standard type by name

Source

pub fn find_document_for_fact(&self, fact_ref: &FactReference) -> Option<String>

Find which document a FactReference belongs to (for inline type definitions)

Source

pub fn get_all_units(&self) -> HashMap<String, Vec<(String, String)>>

Get all units defined across all types, organized by unit name

Returns a map from unit name to a list of (document_name, type_name) pairs where that unit is defined. Useful for error messages and debugging.

§Returns

A HashMap where:

  • Key: unit name (e.g., “celsius”, “kilogram”)
  • Value: list of (document_name, type_name) pairs where the unit is defined

Trait Implementations§

Source§

impl Clone for TypeRegistry

Source§

fn clone(&self) -> TypeRegistry

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for TypeRegistry

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for TypeRegistry

Source§

fn default() -> Self

Returns the “default value” for a type. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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 = Infallible

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.