Skip to main content

DefaultGenerator

Derive Macro DefaultGenerator 

Source
#[derive(DefaultGenerator)]
Expand description

Derive a generator for a struct or enum.

This implements DefaultGenerator for the type, allowing it to be used with default via default::<T>().

For structs, the generated generator has:

  • <field>(generator) - builder method to customize each field’s generator

For enums, the generated generator has:

  • default_<VariantName>() - methods returning default variant generators
  • <VariantName>(generator) - builder methods to customize variant generation

§Struct Example

use hegel::DefaultGenerator;
use hegel::generators::{self as gs, DefaultGenerator as _, Generator as _};

#[derive(DefaultGenerator)]
struct Person {
    name: String,
    age: u32,
}

#[hegel::test]
fn generates_people(tc: hegel::TestCase) {
    let generator = gs::default::<Person>()
        .age(gs::integers::<u32>().min_value(0).max_value(120));
    let person: Person = tc.draw(generator);
}

§Enum Example

use hegel::DefaultGenerator;
use hegel::generators::{self as gs, DefaultGenerator as _, Generator as _};

#[derive(DefaultGenerator)]
enum Status {
    Pending,
    Active { since: String },
    Error { code: i32, message: String },
}

#[hegel::test]
fn generates_statuses(tc: hegel::TestCase) {
    let generator = gs::default::<Status>()
        .active(|g| g.since(gs::text().max_size(20)));
    let status: Status = tc.draw(generator);
}