Skip to main content

DocumentBuilder

Struct DocumentBuilder 

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

DocumentBuilder is a struct to build an arbitrary valid GraphQL document

// fuzz/fuzz_targets/my_apollo_smith_fuzz_target.rs
#![no_main]

use libfuzzer_sys::fuzz_target;
use arbitrary::Unstructured;
use apollo_smith::DocumentBuilder;

fuzz_target!(|input: &[u8]| {
    let mut u = Unstructured::new(input);
    let document = DocumentBuilder::new(&mut u).build()?;
    let document_str = String::from(document);

    // Your code here...
});

Implementations§

Source§

impl DocumentBuilder<'_>

Source

pub fn arguments( &mut self, constness: Constness, ) -> ArbitraryResult<Vec<Argument>>

Create an arbitrary vector of Argument

Source

pub fn arguments_with_def( &mut self, args_def: &ArgumentsDef, ) -> ArbitraryResult<Vec<Argument>>

Create an arbitrary vector of Argument given ArgumentsDef

Source

pub fn argument(&mut self, constness: Constness) -> ArbitraryResult<Argument>

Create an arbitrary Argument

Source

pub fn argument_with_def( &mut self, input_val_def: &InputValueDef, ) -> ArbitraryResult<Argument>

Create an arbitrary Argument

Source

pub fn arguments_definition(&mut self) -> ArbitraryResult<ArgumentsDef>

Create an arbitrary ArgumentsDef

Source§

impl DocumentBuilder<'_>

Source

pub fn description(&mut self) -> ArbitraryResult<Description>

Create an arbitrary Description

Source§

impl DocumentBuilder<'_>

Source

pub fn directives( &mut self, directive_location: DirectiveLocation, ) -> ArbitraryResult<IndexMap<Name, Directive>>

Create an arbitrary vector of Directive

Source

pub fn directive( &mut self, directive_location: DirectiveLocation, ) -> ArbitraryResult<Option<Directive>>

Create an arbitrary Directive given a directive location

Source

pub fn directive_def(&mut self) -> ArbitraryResult<DirectiveDef>

Create an arbitrary DirectiveDef

Source

pub fn directive_locations( &mut self, ) -> ArbitraryResult<IndexSet<DirectiveLocation>>

Create an arbitrary IndexSet of DirectiveLocation

Source§

impl DocumentBuilder<'_>

Source

pub fn enum_type_definition(&mut self) -> Result<EnumTypeDef>

Create an arbitrary EnumTypeDef

Source

pub fn choose_enum(&mut self) -> Result<&EnumTypeDef>

Choose an arbitrary EnumTypeDef in existings (already created) enum definitions

Source

pub fn arbitrary_variant<'b>( &mut self, enum_: &'b EnumTypeDef, ) -> Result<&'b Name>

Create an arbitrary variant Name given an enum

Source

pub fn enum_values_definition( &mut self, exclude: &IndexSet<Name>, ) -> Result<IndexSet<EnumValueDefinition>>

Create an arbitrary EnumValueDefinition

Source§

impl DocumentBuilder<'_>

Source

pub fn fields_definition( &mut self, exclude: &IndexSet<Name>, ) -> ArbitraryResult<Vec<FieldDef>>

Create an arbitrary list of FieldDef

Source

pub fn field(&mut self, _index: usize) -> ArbitraryResult<Field>

Create an arbitrary Field given an object type

Source§

impl DocumentBuilder<'_>

Source

pub fn fragment_definition(&mut self) -> ArbitraryResult<FragmentDef>

Create an arbitrary FragmentDef

Source

pub fn fragment_spread( &mut self, excludes: &mut Vec<Name>, ) -> ArbitraryResult<Option<FragmentSpread>>

Create an arbitrary FragmentSpread, returns None if no fragment definition was previously created

Source

pub fn inline_fragment(&mut self) -> ArbitraryResult<InlineFragment>

Create an arbitrary InlineFragment

Source

pub fn type_condition(&mut self) -> ArbitraryResult<TypeCondition>

Create an arbitrary TypeCondition

Source§

impl DocumentBuilder<'_>

Source

pub fn input_object_type_definition( &mut self, ) -> ArbitraryResult<InputObjectTypeDef>

Create an arbitrary InputObjectTypeDef

Source§

impl DocumentBuilder<'_>

Source

pub fn input_value( &mut self, constness: Constness, ) -> ArbitraryResult<InputValue>

Create an arbitrary InputValue

Source

pub fn input_value_for_type(&mut self, ty: &Ty) -> ArbitraryResult<InputValue>

Source

pub fn input_values_def( &mut self, directive_location: DirectiveLocation, exclude: &IndexSet<Name>, self_name: Option<&Name>, ) -> ArbitraryResult<Vec<InputValueDef>>

Create an arbitrary list of InputValueDef. The caller passes directive_location so directives applied to each value are filtered against the right context — InputFieldDefinition for input-object fields, ArgumentDefinition for argument lists on fields and directives.

Source

pub fn input_value_def( &mut self, directive_location: DirectiveLocation, ) -> ArbitraryResult<InputValueDef>

Create an arbitrary InputValueDef. The caller passes directive_location for the same reason as input_values_def.

Source§

impl DocumentBuilder<'_>

Source

pub fn interface_type_definition(&mut self) -> ArbitraryResult<InterfaceTypeDef>

Create an arbitrary InterfaceTypeDef

Source

pub fn implements_interfaces(&mut self) -> ArbitraryResult<IndexSet<Name>>

Pick a random set of interfaces to implement, expanded to its transitive closure so the validator’s “must also implement” rule is satisfied. A candidate is dropped if its closure would conflict with parents already picked.

Source§

impl DocumentBuilder<'_>

Source

pub fn name(&mut self) -> ArbitraryResult<Name>

Create an arbitrary Name

Source

pub fn type_name(&mut self) -> ArbitraryResult<Name>

Create an arbitrary type Name that does not yet exist in the document.

Source

pub fn name_with_index(&mut self, index: usize) -> ArbitraryResult<Name>

Create an arbitrary Name with an index included in the name (to avoid name conflict)

Source§

impl DocumentBuilder<'_>

Source

pub fn object_type_definition(&mut self) -> ArbitraryResult<ObjectTypeDef>

Create an arbitrary ObjectTypeDef

Source§

impl DocumentBuilder<'_>

Source

pub fn operation_definition(&mut self) -> ArbitraryResult<Option<OperationDef>>

Create an arbitrary OperationDef taking the last SchemaDef.

Source§

impl DocumentBuilder<'_>

Source

pub fn scalar_type_definition(&mut self) -> ArbitraryResult<ScalarTypeDef>

Create an arbitrary ScalarTypeDef

Source§

impl DocumentBuilder<'_>

Source

pub fn schema_definition(&mut self) -> ArbitraryResult<SchemaDef>

Create an arbitrary SchemaDef

Source§

impl DocumentBuilder<'_>

Source

pub fn selection_set(&mut self) -> ArbitraryResult<SelectionSet>

Create an arbitrary SelectionSet

Source

pub fn selection( &mut self, index: usize, excludes: &mut Vec<Name>, ) -> ArbitraryResult<Selection>

Create an arbitrary Selection

Source§

impl DocumentBuilder<'_>

Source

pub fn ty(&mut self) -> ArbitraryResult<Ty>

Create an arbitrary Ty

Source

pub fn choose_ty(&mut self, existing_types: &[Ty]) -> ArbitraryResult<Ty>

Choose an arbitrary existing Ty given a slice of existing types

Source

pub fn choose_named_ty(&mut self, existing_types: &[Ty]) -> ArbitraryResult<Ty>

Choose an arbitrary existing named Ty given a slice of existing types

Source§

impl DocumentBuilder<'_>

Source

pub fn union_type_definition(&mut self) -> ArbitraryResult<UnionTypeDef>

Create an arbitrary UnionTypeDef

Source§

impl DocumentBuilder<'_>

Source

pub fn variable_definitions(&mut self) -> ArbitraryResult<Vec<VariableDef>>

Create an arbitrary list of VariableDef

Source

pub fn variable_definition(&mut self) -> ArbitraryResult<VariableDef>

Create an arbitrary VariableDef

Source§

impl<'a> DocumentBuilder<'a>

Source

pub fn new(u: &'a mut Unstructured<'a>) -> Self

Create an instance of DocumentBuilder

Source

pub fn max_scalar_types(self, max: usize) -> Self

Set the maximum number of scalar type definitions (default 50).

Source

pub fn max_enum_types(self, max: usize) -> Self

Set the maximum number of enum type definitions (default 50).

Source

pub fn max_interface_types(self, max: usize) -> Self

Set the maximum number of interface type definitions (default 50).

Source

pub fn max_object_types(self, max: usize) -> Self

Set the maximum number of object type definitions (default 50).

Source

pub fn max_union_types(self, max: usize) -> Self

Set the maximum number of union type definitions (default 50).

Source

pub fn max_input_object_types(self, max: usize) -> Self

Set the maximum number of input object type definitions (default 50).

Source

pub fn max_fragment_definitions(self, max: usize) -> Self

Set the maximum number of fragment definitions (default 50).

Source

pub fn max_directive_definitions(self, max: usize) -> Self

Set the maximum number of directive definitions (default 50).

Source

pub fn max_operation_definitions(self, max: usize) -> Self

Set the maximum number of operation definitions (default 50).

Source

pub fn build(self) -> Result<Document>

Generate random definitions according to the configured maximums and return the resulting Document.

Source

pub fn with_document( u: &'a mut Unstructured<'a>, document: Document, ) -> Result<Self>

Create an instance of DocumentBuilder given a Document to be able to call methods on DocumentBuilder and generate valid entities like for example an operation

Source

pub fn input_exhausted(&self) -> bool

Returns whether the provided Unstructured is now empty

Trait Implementations§

Source§

impl Debug for DocumentBuilder<'_>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for DocumentBuilder<'a>

§

impl<'a> !Send for DocumentBuilder<'a>

§

impl<'a> !Sync for DocumentBuilder<'a>

§

impl<'a> !UnwindSafe for DocumentBuilder<'a>

§

impl<'a> Freeze for DocumentBuilder<'a>

§

impl<'a> Unpin for DocumentBuilder<'a>

§

impl<'a> UnsafeUnpin for DocumentBuilder<'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, 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> Paint for T
where T: ?Sized,

Source§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

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>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
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.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

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);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. 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.