Skip to main content

GraphqlSelect

Struct GraphqlSelect 

Source
pub struct GraphqlSelect {
Show 14 fields pub root_field: Option<String>, pub operation_name: Option<String>, pub fields: Vec<String>, pub root_args: Option<Value>, pub response_path: Vec<String>, pub sub_selections: Vec<(String, GraphqlSelect)>, pub conditions: Vec<GraphqlCondition>, pub sort: Vec<(String, Order)>, pub group_by: Vec<String>, pub limit: Option<i64>, pub skip: Option<i64>, pub distinct: bool, pub dialect: FilterDialect, pub filter_arg_name: Option<String>,
}
Expand description

GraphQL query builder — produces a query document + variables map.

Construct via GraphqlSelect::new() and the chainable builders, or via Selectable::with_* methods. Designed to be generic in shape: most servers wrap their list-field with a filter arg (where:, find:, …) plus pagination args, and the renderer handles both dialects we ship with.

Fields§

§root_field: Option<String>

Root field on the Query type — launches, usersList, etc.

§operation_name: Option<String>

Optional operation name (e.g. query GetLaunches { … }).

§fields: Vec<String>

Selected fields. A dotted path (run.commit.hash) groups into a nested selection set at render time, so a schema that nests its scalars needs no relation machinery to read them.

§root_args: Option<Value>

Literal arguments always passed to the root field — the mandatory input: {} on Spacelift’s searchRuns(input: SearchInput!), say. Rendered inline alongside any filter/pagination arguments.

§response_path: Vec<String>

Envelope the rows sit inside, e.g. ["edges", "node"] for a Relay connection. The selection set is wrapped in these on the way out and the response is unwrapped through them on the way back, so the two can never drift apart.

§sub_selections: Vec<(String, GraphqlSelect)>

Nested selection sets for relationship traversal. Built up by the Phase 6 with_many/with_one paths.

§conditions: Vec<GraphqlCondition>

Conditions combined into the filter argument.

§sort: Vec<(String, Order)>

Ordering specification. Hasura renders these as order_by:; other dialects ignore them (or error) until the schema map provides a per-table override.

§group_by: Vec<String>

GROUP BY fields. Most GraphQL servers don’t expose grouping at the query level — we record these for round-trip and let the renderer decide whether to surface them.

§limit: Option<i64>

LIMIT. Emitted as a $limit: Int variable.

§skip: Option<i64>

Offset. Emitted as a $offset: Int variable.

§distinct: bool

Distinct flag — meaningful only when the schema supports it (Hasura’s distinct_on:). Plumbed through but ignored by the default renderer until a per-dialect path is added.

§dialect: FilterDialect

Filter dialect — drives how conditions get rendered into a GraphQL argument. Defaults to Generic so the cheapest schemas work without configuration.

§filter_arg_name: Option<String>

Override for the filter argument name. Defaults to where (Hasura) or find (Generic).

Implementations§

Source§

impl GraphqlSelect

Source

pub fn with_root_field(self, name: impl Into<String>) -> Self

Source

pub fn with_operation_name(self, name: impl Into<String>) -> Self

Source

pub fn with_dialect(self, dialect: FilterDialect) -> Self

Source

pub fn with_filter_arg_name(self, name: impl Into<String>) -> Self

Source

pub fn with_field(self, name: impl Into<String>) -> Self

Add a terminal (scalar) field to the selection set.

Source

pub fn with_root_args(self, args: Value) -> Self

Literal arguments always passed to the root field. Expects a JSON object; anything else is ignored at render time.

Source

pub fn with_response_path(self, path: Vec<String>) -> Self

Envelope the rows sit inside — ["edges", "node"] wraps the selection set in edges { node { … } }.

Source

pub fn with_sub_selection( self, name: impl Into<String>, child: GraphqlSelect, ) -> Self

Add a sub-selection — used for nested relationships in Phase 6.

Source

pub fn with_condition(self, condition: GraphqlCondition) -> Self

Source

pub fn with_order(self, field: impl Into<String>, order: Order) -> Self

Source

pub fn with_limit(self, limit: Option<i64>, skip: Option<i64>) -> Self

Source§

impl GraphqlSelect

Source

pub async fn render(&self) -> Result<RenderedQuery>

Produce a (query, variables) pair. Async because conditions may carry Deferred branches that resolve at fetch time.

Source

pub fn preview(&self) -> String

The document render would produce, built synchronously so it can be shown without sending anything.

Mirrors render arm for arm — same filter, same order, same selection set, same response envelope — and differs in exactly two ways, both forced by not being allowed to do any work:

  1. A deferred condition renders as a **deferred(...) marker rather than being awaited. Resolving one means asking the caller for a value that only exists mid-fetch.
  2. Pagination is inlined (limit: 5) instead of going through the $limit variable, so the document reads standalone. The server is told the same numbers either way.

Everything else is the query that gets sent, and pastes into a GraphQL client as-is.

Source§

impl GraphqlSelect

Source

pub fn new() -> Self

Trait Implementations§

Source§

impl Clone for GraphqlSelect

Source§

fn clone(&self) -> GraphqlSelect

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 GraphqlSelect

Source§

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

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

impl Default for GraphqlSelect

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Expressive<AnyGraphqlType> for GraphqlSelect

Source§

fn expr(&self) -> Expression<AnyGraphqlType>

Convert this construct into an Expression<T>. Read more
Source§

fn preview(&self) -> String
where T: Debug + Display,

Preview the expression as a formatted string. Read more
Source§

impl Selectable<AnyGraphqlType, GraphqlCondition> for GraphqlSelect

Source§

fn add_source( &mut self, source: impl Into<SourceRef<AnyGraphqlType>>, _alias: Option<String>, )

Adds a data source to the FROM clause (table name, subquery, etc.). This is additive — calling it multiple times adds comma-separated sources.
Source§

fn add_field(&mut self, field: impl Into<String>)

Adds a column name to the SELECT clause.
Source§

fn add_expression(&mut self, _expression: impl Expressive<AnyGraphqlType>)

Adds a complex expression to the SELECT clause.
Source§

fn add_where_condition(&mut self, condition: impl Into<GraphqlCondition>)

Adds a condition to the WHERE clause.
Source§

fn set_distinct(&mut self, distinct: bool)

Sets whether the query should return distinct results.
Source§

fn add_order_by(&mut self, order: impl Into<GraphqlCondition>, direction: Order)

Adds an ORDER BY clause with direction and optional null handling.
Source§

fn add_group_by(&mut self, expression: impl Expressive<AnyGraphqlType>)

Adds a GROUP BY clause.
Source§

fn set_limit(&mut self, limit: Option<i64>, skip: Option<i64>)

Sets LIMIT and OFFSET for result pagination.
Source§

fn clear_fields(&mut self)

Removes all fields from the SELECT clause.
Source§

fn clear_where_conditions(&mut self)

Removes all WHERE conditions.
Source§

fn clear_order_by(&mut self)

Removes all ORDER BY clauses.
Source§

fn clear_group_by(&mut self)

Removes all GROUP BY clauses.
Source§

fn has_fields(&self) -> bool

Returns true if any fields have been added to SELECT clause.
Source§

fn has_where_conditions(&self) -> bool

Returns true if any WHERE conditions have been added.
Source§

fn has_order_by(&self) -> bool

Returns true if any ORDER BY clauses have been added.
Source§

fn has_group_by(&self) -> bool

Returns true if any GROUP BY clauses have been added.
Source§

fn is_distinct(&self) -> bool

Returns true if DISTINCT mode is enabled.
Source§

fn get_limit(&self) -> Option<i64>

Returns the current LIMIT value, if set.
Source§

fn get_skip(&self) -> Option<i64>

Returns the current OFFSET/SKIP value, if set.
Source§

fn as_field(&self, _field: impl Into<String>) -> Expression<AnyGraphqlType>

Creates a single-field subquery expression from this query configuration. Read more
Source§

fn as_count(&self) -> Expression<AnyGraphqlType>

Creates a COUNT(*) expression from this query configuration.
Source§

fn as_sum( &self, column: impl Expressive<AnyGraphqlType>, ) -> Expression<AnyGraphqlType>

Creates a SUM(column) expression from this query configuration.
Source§

fn as_max( &self, column: impl Expressive<AnyGraphqlType>, ) -> Expression<AnyGraphqlType>

Creates a MAX(column) expression from this query configuration.
Source§

fn as_min( &self, column: impl Expressive<AnyGraphqlType>, ) -> Expression<AnyGraphqlType>

Creates a MIN(column) expression from this query configuration.
Source§

fn with_source(self, source: impl Into<SourceRef<T>>) -> Self
where Self: Sized,

Builder pattern method identical to Self::add_source without alias.
Source§

fn with_source_as( self, source: impl Into<SourceRef<T>>, alias: impl Into<String>, ) -> Self
where Self: Sized,

Builder pattern method identical to Self::add_source with alias.
Source§

fn with_condition(self, condition: impl Into<C>) -> Self
where Self: Sized,

Builder pattern method identical to Self::add_where_condition.
Source§

fn with_order(self, order: impl Into<C>, direction: Order) -> Self
where Self: Sized,

Builder pattern method identical to Self::add_order_by.
Source§

fn with_field(self, field: impl Into<String>) -> Self
where Self: Sized,

Builder pattern method identical to Self::add_field.
Source§

fn with_expression(self, expression: impl Expressive<T>) -> Self
where Self: Sized,

Builder pattern method identical to Self::add_expression.
Source§

fn with_group_by(self, expression: impl Expressive<T>) -> Self
where Self: Sized,

Builder pattern method identical to Self::add_group_by.
Source§

fn with_distinct(self, distinct: bool) -> Self
where Self: Sized,

Builder pattern method identical to Self::set_distinct.
Source§

fn with_limit(self, limit: Option<i64>, skip: Option<i64>) -> Self
where Self: Sized,

Builder pattern method identical to Self::set_limit.

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> ColumnType for T
where T: Sync + Send + Debug + Clone + 'static,

Source§

impl<T> ExpressionLike for T
where T: Clone + Send + Sync + 'static,

Source§

fn clone_box(&self) -> Box<dyn ExpressionLike>

Clone this expression into a Box
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert to Any for downcasting
Source§

fn type_id(&self) -> TypeId

Get the TypeId of the concrete type
Source§

fn type_name(&self) -> &'static str

Get the type name for debugging
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, S> GraphqlOperation<T> for S
where S: Expressive<T>,

Source§

fn eq(&self, value: impl Into<AnyGraphqlType>) -> GraphqlCondition
where Self: Sized,

field = value
Source§

fn ne(&self, value: impl Into<AnyGraphqlType>) -> GraphqlCondition
where Self: Sized,

field != value
Source§

fn gt(&self, value: impl Into<AnyGraphqlType>) -> GraphqlCondition
where Self: Sized,

field > value
Source§

fn gte(&self, value: impl Into<AnyGraphqlType>) -> GraphqlCondition
where Self: Sized,

field >= value
Source§

fn lt(&self, value: impl Into<AnyGraphqlType>) -> GraphqlCondition
where Self: Sized,

field < value
Source§

fn lte(&self, value: impl Into<AnyGraphqlType>) -> GraphqlCondition
where Self: Sized,

field <= value
Source§

fn in_<I, V>(&self, values: I) -> GraphqlCondition
where Self: Sized, I: IntoIterator<Item = V>, V: Into<AnyGraphqlType>,

field IN [values...]
Source§

fn not_in<I, V>(&self, values: I) -> GraphqlCondition
where Self: Sized, I: IntoIterator<Item = V>, V: Into<AnyGraphqlType>,

field NOT IN [values...]
Source§

fn like(&self, pattern: impl Into<String>) -> GraphqlCondition
where Self: Sized,

field LIKE pattern — case-sensitive substring match.
Source§

fn ilike(&self, pattern: impl Into<String>) -> GraphqlCondition
where Self: Sized,

field ILIKE pattern — case-insensitive substring match.
Source§

fn is_null(&self) -> GraphqlCondition
where Self: Sized,

field IS NULL
Source§

fn is_not_null(&self) -> GraphqlCondition
where Self: Sized,

field IS NOT NULL
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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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> 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.
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