pub struct ResponseBuilder<'a, 'doc, 'schema, R: RandomProvider> { /* private fields */ }Expand description
Builds a GraphQL response which matches the shape of a given executable GraphQL document.
ResponseBuilder is generic over its randomness source via the RandomProvider trait.
This allows it to be used with arbitrary::Unstructured for fuzz testing, with
RandProvider for standard random generation, or with any custom
implementation.
§Example
use apollo_smith::{ResponseBuilder, RandProvider};
let mut rng = RandProvider(rand::rng());
let response = ResponseBuilder::new(&mut rng, &doc, &schema).build()?;Implementations§
Source§impl<'a, 'doc, 'schema, R: RandomProvider> ResponseBuilder<'a, 'doc, 'schema, R>
impl<'a, 'doc, 'schema, R: RandomProvider> ResponseBuilder<'a, 'doc, 'schema, R>
Sourcepub fn new(
rng: &'a mut R,
doc: &'doc Valid<ExecutableDocument>,
schema: &'schema Valid<Schema>,
) -> Self
pub fn new( rng: &'a mut R, doc: &'doc Valid<ExecutableDocument>, schema: &'schema Valid<Schema>, ) -> Self
Create a new ResponseBuilder.
Sourcepub fn with_generator<G>(self, type_name: Name, generator: G) -> Selfwhere
G: Generator<R> + 'static,
pub fn with_generator<G>(self, type_name: Name, generator: G) -> Selfwhere
G: Generator<R> + 'static,
Register a Generator for the named GraphQL type.
When the builder is about to produce a value of this type — at the root or any
nested position, including each item of a list — the generator is invoked
instead of the default behavior. For object, interface, and union types, the
generator receives the requested fields with fragment spreads and inline
fragments already flattened and grouped by response key, and its return value
is used as-is (the builder does not recurse into it). For scalar types, the
fields argument is empty and the generator’s return value replaces the
configured default.
Sourcepub fn with_min_list_size(self, min_size: usize) -> Self
pub fn with_min_list_size(self, min_size: usize) -> Self
Set the minimum number of items per list field. If unset, defaults to 0.
Sourcepub fn with_max_list_size(self, max_size: usize) -> Self
pub fn with_max_list_size(self, max_size: usize) -> Self
Set the maximum number of items per list field. If unset, defaults to 5.
Sourcepub fn with_null_ratio(self, numerator: u32, denominator: u32) -> Self
pub fn with_null_ratio(self, numerator: u32, denominator: u32) -> Self
Set the frequency of null values for nullable fields. If unset, fields will never be null.
Sourcepub fn with_operation_name(self, operation_name: Option<&'doc str>) -> Self
pub fn with_operation_name(self, operation_name: Option<&'doc str>) -> Self
Set the operation name to generate a response for. If unset, uses the anonymous operation.
If the operation does not exist, returns a response with data: null.
Sourcepub fn build(self) -> Result<Value, ResponseError>
pub fn build(self) -> Result<Value, ResponseError>
Builds a complete GraphQL response Value with a data key, matching the shape of self.doc.
Sourcepub fn build_data(&mut self) -> Result<Value, ResponseError>
pub fn build_data(&mut self) -> Result<Value, ResponseError>
Builds just the data portion of the response (without the { "data": ... } wrapper).
This is useful if you need to manipulate the response data before wrapping it into JSON.
Auto Trait Implementations§
impl<'a, 'doc, 'schema, R> !RefUnwindSafe for ResponseBuilder<'a, 'doc, 'schema, R>
impl<'a, 'doc, 'schema, R> !Send for ResponseBuilder<'a, 'doc, 'schema, R>
impl<'a, 'doc, 'schema, R> !Sync for ResponseBuilder<'a, 'doc, 'schema, R>
impl<'a, 'doc, 'schema, R> !UnwindSafe for ResponseBuilder<'a, 'doc, 'schema, R>
impl<'a, 'doc, 'schema, R> Freeze for ResponseBuilder<'a, 'doc, 'schema, R>
impl<'a, 'doc, 'schema, R> Unpin for ResponseBuilder<'a, 'doc, 'schema, R>
impl<'a, 'doc, 'schema, R> UnsafeUnpin for ResponseBuilder<'a, 'doc, 'schema, R>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);