Skip to main content

FragmentResolver

Struct FragmentResolver 

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

Resolves GraphQL fragment spreads in query selection sets.

Handles fragment spreads (...FragmentName) by expanding them to their actual field selections. Also merges multiple fragment definitions and handles field deduplication.

§Example

use fraiseql_core::graphql::{FragmentResolver, FragmentDefinition, FieldSelection};

let fragment = FragmentDefinition {
    name: "UserFields".to_string(),
    type_condition: "User".to_string(),
    selections: vec![
        FieldSelection {
            name: "id".to_string(),
            alias: None,
            arguments: vec![],
            nested_fields: vec![],
            directives: vec![],
        },
    ],
    fragment_spreads: vec![],
};

let resolver = FragmentResolver::new(&[fragment]);

Implementations§

Source§

impl FragmentResolver

Source

pub fn new(fragments: &[FragmentDefinition]) -> Self

Create a new fragment resolver from a list of fragment definitions.

Source

pub fn with_max_depth(self, max_depth: u32) -> Self

Create a resolver with a custom max depth.

Source

pub fn resolve_spreads( &self, selections: &[FieldSelection], ) -> Result<Vec<FieldSelection>, FragmentError>

Resolve all fragment spreads in selections.

§Errors

Returns error if:

  • Fragment is not found
  • Fragment depth exceeds maximum
  • Circular references are detected
Source

pub fn evaluate_inline_fragment( selections: &[FieldSelection], type_condition: Option<&str>, actual_type: &str, ) -> Vec<FieldSelection>

Handle inline fragments with type conditions.

Evaluates whether an inline fragment applies based on type conditions. Returns the selections if the type condition matches, or an empty vector if it doesn’t.

Source

pub fn merge_selections( base: &[FieldSelection], additional: Vec<FieldSelection>, ) -> Vec<FieldSelection>

Merge field selections from multiple sources (e.g., fragment spreads).

Handles:

  • Combining fields from multiple fragments
  • Deduplicating fields by name/alias
  • Merging nested selections

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> 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> 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<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