Skip to main content

ModelQuery

Struct ModelQuery 

Source
pub struct ModelQuery<'a> { /* private fields */ }
Expand description

Query builder for SAMM Aspect Models

Provides a fluent API for querying and analyzing SAMM models.

Implementations§

Source§

impl<'a> ModelQuery<'a>

Source

pub fn new(aspect: &'a Aspect) -> Self

Creates a new query builder for the given aspect

§Examples
use oxirs_samm::query::ModelQuery;
let query = ModelQuery::new(aspect);
Source

pub fn find_properties_with_collection_characteristic(&self) -> Vec<&Property>

Finds all properties with Collection, List, Set, or SortedSet characteristics

§Returns

Vector of properties that have collection-type characteristics

Source

pub fn find_optional_properties(&self) -> Vec<&Property>

Finds all optional properties

§Returns

Vector of properties marked as optional

Source

pub fn find_required_properties(&self) -> Vec<&Property>

Finds all required (non-optional) properties

§Returns

Vector of properties that are required

Source

pub fn find_properties_in_namespace(&self, namespace: &str) -> Vec<&Property>

Finds properties by URN namespace

§Arguments
  • namespace - The URN namespace to match (e.g., “urn:samm:org.example:1.0.0”)
§Returns

Vector of properties in the specified namespace

Source

pub fn find_properties_by_characteristic<F>( &self, predicate: F, ) -> Vec<&Property>
where F: Fn(&CharacteristicKind) -> bool,

Finds all properties with specific characteristic type

§Arguments
  • predicate - Function to test characteristic kind
§Returns

Vector of properties matching the predicate

Source

pub fn find_all_referenced_entities(&self) -> HashSet<String>

Finds all entities referenced directly or indirectly by the aspect

This performs a breadth-first search through all properties and their characteristics to discover all entity references.

§Returns

Set of unique entity URNs referenced by the model

Source

pub fn build_dependency_graph(&self) -> Vec<Dependency>

Builds a dependency graph of all model elements

§Returns

Vector of dependencies showing relationships between elements

Source

pub fn detect_circular_dependencies(&self) -> Vec<Vec<String>>

Detects circular dependencies in the model

Uses depth-first search to detect cycles in the dependency graph.

§Returns

Vector of URN chains representing circular dependencies

Source

pub fn complexity_metrics(&self) -> ComplexityMetrics

Calculates complexity metrics for the model

§Returns

Complexity metrics including property counts, nesting depth, and reference counts

Source

pub fn find_properties_by_name_pattern(&self, pattern: &str) -> Vec<&Property>

Finds properties by name pattern (case-insensitive)

§Arguments
  • pattern - Pattern to match against property names
§Returns

Vector of properties with names containing the pattern

Source

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

Groups properties by their characteristic type

§Returns

HashMap mapping characteristic type names to vectors of properties

Source

pub fn aspect(&self) -> &Aspect

Gets the aspect reference

Source

pub fn fuzzy_find_properties( &self, query: &str, max_distance: usize, ) -> Vec<(&Property, usize)>

Find properties by fuzzy name matching

Uses Levenshtein distance to find properties whose names are similar to the query. Useful for finding properties when you don’t know the exact name.

§Arguments
  • query - The property name to search for (partial or misspelled)
  • max_distance - Maximum Levenshtein distance (lower = stricter matching)
§Returns

Vector of (property, distance) tuples, sorted by distance (best matches first)

§Examples
use oxirs_samm::query::ModelQuery;
let query = ModelQuery::new(aspect);

// Find properties with names similar to "temperture" (misspelled)
let results = query.fuzzy_find_properties("temperture", 3);
for (property, distance) in results {
    println!("Found: {} (distance: {})", property.name(), distance);
}
Source

pub fn fuzzy_find_operations( &self, query: &str, max_distance: usize, ) -> Vec<(&Operation, usize)>

Find operations by fuzzy name matching

Uses Levenshtein distance to find operations whose names are similar to the query.

§Arguments
  • query - The operation name to search for
  • max_distance - Maximum Levenshtein distance
§Returns

Vector of (operation, distance) tuples, sorted by distance

Source

pub fn fuzzy_find_any_element( &self, query: &str, max_distance: usize, ) -> Vec<(String, String, usize)>

Find all model elements (properties, operations) by fuzzy search

Searches across all element names in the aspect.

§Arguments
  • query - The element name to search for
  • max_distance - Maximum Levenshtein distance
§Returns

Vector of (element name, URN, distance) tuples, sorted by distance

Source

pub fn suggest_properties(&self, prefix: &str, limit: usize) -> Vec<String>

Find properties with similar names (auto-suggest)

Provides auto-complete style suggestions based on prefix matching combined with fuzzy matching as fallback.

§Arguments
  • prefix - The partial property name to match
  • limit - Maximum number of suggestions to return
§Returns

Vector of suggested property names

Auto Trait Implementations§

§

impl<'a> Freeze for ModelQuery<'a>

§

impl<'a> RefUnwindSafe for ModelQuery<'a>

§

impl<'a> Send for ModelQuery<'a>

§

impl<'a> Sync for ModelQuery<'a>

§

impl<'a> Unpin for ModelQuery<'a>

§

impl<'a> UnsafeUnpin for ModelQuery<'a>

§

impl<'a> UnwindSafe for ModelQuery<'a>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,