Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Default mutators for String/str types? #6

Open
teymour-aldridge opened this issue Jun 16, 2021 · 14 comments
Open

Default mutators for String/str types? #6

teymour-aldridge opened this issue Jun 16, 2021 · 14 comments

Comments

@teymour-aldridge
Copy link
Collaborator

teymour-aldridge commented Jun 16, 2021

This would be a nice addition :)

(I am currently using a Vec<u8>, and then converting this into Strings, but I suspect that this is suboptimal)

If you could suggest how to do this (just the general approach) I would also be happy to try to implement this.

@loiclec
Copy link
Owner

loiclec commented Jun 16, 2021

I agree :)

I don't have any time to work on this at the moment, but I will starting beginning of July. If you don't want to wait a couple months for a String mutator, or if you don't mind spending some time getting familiar with the Mutator trait and implementing one, then I'm happy to help you. But you really don't need to. I don't want to place any burden on you :)

One problem I have with writing a string mutator is that there are a lot of substrings that we'd like to generate more often than others. Knowing which substrings are interesting is something I need to research more, and it will probably require some unicode knowledge. But of course it doesn't need to be perfect. I think proptest's string generator will be a good inspiration.

I think we need to create at least two kinds of string mutators. The first kind is for truly arbitrary strings and the second one is for strings that match a regex/grammar. So far I have only played with a prototype for the second kind.
Which one would you be interested in?

@loiclec
Copy link
Owner

loiclec commented Jul 7, 2021

Quick update to say that I am currently working on a regex-based string mutator. The goal is to be able to write:

let string_mutator = regex_based_mutator_or_sth!("(a|b)+[0-9]?"); // impl Mutator<String>

We'll see how well it works. I'll try to push it to this repo within two weeks.

@teymour-aldridge
Copy link
Collaborator Author

Ah sorry, my inbox filter seemed to miss your earlier message.

A regex-conforming mutator would be awesome! An arbitrary string-based one would be useful to, but I would imagine is a subset of the regex-conforming

In any case, thanks for your awesome library :D

@loiclec
Copy link
Owner

loiclec commented Jul 19, 2021

Thanks :)

I have pushed a lot of commits that I didn't realise were not on Github. Also, I have the first draft of a grammar-based string mutator. I have jotted down a quick summary of the design, which you can read about here if you'd like.

It's still very early, not well-tested, and will change a lot. But for now, what one can do is something like:

use fuzzcheck_mutators::{concatenation, alternation, repetition, literal};
use fuzzcheck_mutators::grammar::GrammarBasedStringMutator;

// corresponds to [a-z][a-z0-9]{5,10}[0-9]{2,6}z)
// the type is Grammar. It is easy to create it without a macro, but a bit more verbose
let grammar = concatenation! {
    literal!('a' ..= 'z'),
    repetition! {
        literal!(('a'..='z'), ('0'..='9')),
        5..=10
    },
    repetition! {
        literal!('0'..='9'),
        2 ..= 6
    },
    literal!('z')
};
let mutator = GrammarBasedStringMutator::new(grammar); // impl Mutator<String>

I don't know when all that will make it to a release. fuzzcheck has become a bit messy and I really need to spend some time organising, simplifying, documenting, and testing it. But I promise it will be good in the end :)

@MTRNord
Copy link

MTRNord commented Nov 27, 2021

Hi just wondering how I can combine this with the struct based approach. For example I have this struct and due to the strings the derive will fail to compile. The struct is used within another struct. And i wonder how I can now use that grammar based mutator with that.

Code I used before with arbitrary is this:

use serde::{Deserialize, Serialize};

#[cfg_attr(test, derive(fuzzcheck::DefaultMutator))]
#[derive(Serialize, Deserialize, Clone, Debug, arbitrary::Arbitrary)]
#[serde(rename_all = "lowercase")]
pub enum RegisterKind {
    Guest,
    User,
}

#[cfg_attr(test, derive(fuzzcheck::DefaultMutator))]
#[derive(Serialize, Deserialize, Clone, Debug, arbitrary::Arbitrary)]
pub struct AuthenticationData {
    pub session: String,
    #[serde(rename = "type")]
    pub register_type: String,
}

#[cfg_attr(test, derive(fuzzcheck::DefaultMutator))]
#[derive(Serialize, Deserialize, Clone, Debug, arbitrary::Arbitrary)]
pub struct DummyRegistrationJson {
    pub kind: RegisterKind,
    pub auth: AuthenticationData,
    pub device_id: String,
    pub inhibit_login: bool,
    pub initial_device_display_name: String,
    pub password: String,
    pub username: String,
}

@loiclec
Copy link
Owner

loiclec commented Nov 28, 2021

Hi!
It is unfortunately not possible with fuzzcheck 0.9. It used to be possible to write something like:

#[derive(.., DefaultMutator)]
struct AuthenticationData {
    #[field_mutator(GrammarBasedStringMutator = { grammar_based_string_mutator(regex("[a-z0-9]+")) })]
    session: String
}

But I've temporarily removed grammar-based string mutators because they were broken. So for now, all the grammar-based stuff can only produce values of type AST, and they can't be used to generate a String within a struct.

So for a proper solution, you may need to wait maybe a month or two :(

There is a workaround that works if you're ok with a non-grammar-based String mutator. It consists of wrapping a Vec<u8> inside a MapMutator, which transforms the bytes into a string right before giving the value to the test function. It is done as follows:

#![feature(no_coverage)]
// I'm sure there is a way to do it without those two extra features, but it requires a lot more work
#![feature(trivial_bounds)]
#![feature(type_alias_impl_trait)]

use fuzzcheck::{Mutator, DefaultMutator};
use fuzzcheck::mutators::map::MapMutator;

type StringMutator = impl Mutator<String>;

fn string_mutator() -> StringMutator {
    MapMutator::new(
        // the base mutator produces values of type Vector<u8>
        <Vec<u8>>::default_mutator(),
        // the parse function: given a string, how can I get a vector?
        |string: &String| Some(string.as_bytes().to_vec()),
        // the map function: how can I get a string from a vector?
        |xs| String::from_utf8_lossy(&xs).to_string(),
        // the complexity function
        |_, cplx| cplx,
    )
}

// we can't use DefaultMutator here yet, that should be fixed at some point in the future
#[derive(Clone, serde::Serialize, serde::Deserialize)]
struct AuthenticationData {
    session: String
}

// instead, we use the more customisable make_mutator! macro
fuzzcheck::make_mutator! {
    // name of the generated mutator
    name: AuthenticationDataMutator,
    // whether AuthenticationData should implement DefaultMutator
    default: true,
    // we repeat the type declaration
    type:
        struct AuthenticationData {
            // this field is generated by a `StringMutator`, which is initialised by the code between the curly braces
            #[field_mutator(StringMutator = { string_mutator() })]
            session: String,
        }
}

#[test]
fn fuzz() {
    let mutator = AuthenticationData::default_mutator();
    // ...
}

@MTRNord
Copy link

MTRNord commented Nov 28, 2021

Ah ok. Thanks for that example though. I think the workaround will do it for now as I am still evaluating options for a fuzzer in the project. (Mostly as by now all I tested behaved very different to exactly the same code :( )

@MTRNord
Copy link

MTRNord commented Nov 28, 2021

Hm does the example miss something? I am getting a lot of not satisfied trait bounds with it:

error[E0599]: the method `fmt` exists for struct `fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:51:1
    |
51  | / make_mutator! {
52  | |     name: AuthenticationDataMutator,
53  | |     default: true,
54  | |     type:
...   |
60  | |         }
61  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:358:5
    |
358 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(2);
    |       ------------------------------------------------------- doesn't satisfy `_: std::fmt::Debug`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache: std::fmt::Debug`
            which is required by `fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::fmt::Debug`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `eq` exists for struct `fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:51:1
    |
51  | / make_mutator! {
52  | |     name: AuthenticationDataMutator,
53  | |     default: true,
54  | |     type:
...   |
60  | |         }
61  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:358:5
    |
358 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(2);
    |       -------------------------------------------------------
    |       |
    |       doesn't satisfy `_: std::cmp::PartialEq`
    |       doesn't satisfy `_: std::iter::Iterator`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache: std::cmp::PartialEq`
            which is required by `fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::cmp::PartialEq`
            `fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::iter::Iterator`
            which is required by `&mut fuzzcheck::mutators::tuples::tuple2::Cache<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::iter::Iterator`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `fmt` exists for struct `fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:51:1
    |
51  | / make_mutator! {
52  | |     name: AuthenticationDataMutator,
53  | |     default: true,
54  | |     type:
...   |
60  | |         }
61  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:358:5
    |
358 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(2);
    |       ------------------------------------------------------- doesn't satisfy `_: std::fmt::Debug`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep: std::fmt::Debug`
            which is required by `fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::fmt::Debug`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `eq` exists for struct `fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:51:1
    |
51  | / make_mutator! {
52  | |     name: AuthenticationDataMutator,
53  | |     default: true,
54  | |     type:
...   |
60  | |         }
61  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:358:5
    |
358 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(2);
    |       -------------------------------------------------------
    |       |
    |       doesn't satisfy `_: std::cmp::PartialEq`
    |       doesn't satisfy `_: std::iter::Iterator`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep: std::cmp::PartialEq`
            which is required by `fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::cmp::PartialEq`
            `fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::iter::Iterator`
            which is required by `&mut fuzzcheck::mutators::tuples::tuple2::MutationStep<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::iter::Iterator`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `fmt` exists for struct `fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:51:1
    |
51  | / make_mutator! {
52  | |     name: AuthenticationDataMutator,
53  | |     default: true,
54  | |     type:
...   |
60  | |         }
61  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:358:5
    |
358 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(2);
    |       ------------------------------------------------------- doesn't satisfy `_: std::fmt::Debug`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex: std::fmt::Debug`
            which is required by `fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::fmt::Debug`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `eq` exists for struct `fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:51:1
    |
51  | / make_mutator! {
52  | |     name: AuthenticationDataMutator,
53  | |     default: true,
54  | |     type:
...   |
60  | |         }
61  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:358:5
    |
358 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(2);
    |       -------------------------------------------------------
    |       |
    |       doesn't satisfy `_: std::cmp::PartialEq`
    |       doesn't satisfy `_: std::iter::Iterator`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex: std::cmp::PartialEq`
            which is required by `fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::cmp::PartialEq`
            `fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::iter::Iterator`
            which is required by `&mut fuzzcheck::mutators::tuples::tuple2::RecursingPartIndex<<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::iter::Iterator`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `fmt` exists for struct `fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:64:1
    |
64  | / make_mutator! {
65  | |     name: DummyRegistrationJsonMutator,
66  | |     default: true,
67  | |     type:
...   |
80  | |         }
81  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:383:5
    |
383 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(7);
    |       ------------------------------------------------------- doesn't satisfy `_: std::fmt::Debug`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache: std::fmt::Debug`
            which is required by `fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::fmt::Debug`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `eq` exists for struct `fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:64:1
    |
64  | / make_mutator! {
65  | |     name: DummyRegistrationJsonMutator,
66  | |     default: true,
67  | |     type:
...   |
80  | |         }
81  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:383:5
    |
383 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(7);
    |       -------------------------------------------------------
    |       |
    |       doesn't satisfy `_: std::cmp::PartialEq`
    |       doesn't satisfy `_: std::iter::Iterator`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache: std::cmp::PartialEq`
            which is required by `fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::cmp::PartialEq`
            `fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::iter::Iterator`
            which is required by `&mut fuzzcheck::mutators::tuples::tuple7::Cache<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::Cache, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <M3 as fuzzcheck::Mutator<bool>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::Cache>: std::iter::Iterator`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `fmt` exists for struct `fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:64:1
    |
64  | / make_mutator! {
65  | |     name: DummyRegistrationJsonMutator,
66  | |     default: true,
67  | |     type:
...   |
80  | |         }
81  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:383:5
    |
383 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(7);
    |       ------------------------------------------------------- doesn't satisfy `_: std::fmt::Debug`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep: std::fmt::Debug`
            which is required by `fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::fmt::Debug`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `eq` exists for struct `fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:64:1
    |
64  | / make_mutator! {
65  | |     name: DummyRegistrationJsonMutator,
66  | |     default: true,
67  | |     type:
...   |
80  | |         }
81  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:383:5
    |
383 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(7);
    |       -------------------------------------------------------
    |       |
    |       doesn't satisfy `_: std::cmp::PartialEq`
    |       doesn't satisfy `_: std::iter::Iterator`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep: std::cmp::PartialEq`
            which is required by `fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::cmp::PartialEq`
            `fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::iter::Iterator`
            which is required by `&mut fuzzcheck::mutators::tuples::tuple7::MutationStep<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::MutationStep, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <M3 as fuzzcheck::Mutator<bool>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::MutationStep>: std::iter::Iterator`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `fmt` exists for struct `fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:64:1
    |
64  | / make_mutator! {
65  | |     name: DummyRegistrationJsonMutator,
66  | |     default: true,
67  | |     type:
...   |
80  | |         }
81  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:383:5
    |
383 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(7);
    |       ------------------------------------------------------- doesn't satisfy `_: std::fmt::Debug`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex: std::fmt::Debug`
            which is required by `fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::fmt::Debug`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `eq` exists for struct `fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>`, but its trait bounds were not satisfied
   --> conduit-fuzzer/src/types.rs:64:1
    |
64  | / make_mutator! {
65  | |     name: DummyRegistrationJsonMutator,
66  | |     default: true,
67  | |     type:
...   |
80  | |         }
81  | | }
    | |_^ method cannot be called on `fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>` due to unsatisfied trait bounds
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/mutators/tuples.rs:383:5
    |
383 |       fuzzcheck_mutators_derive::make_basic_tuple_mutator!(7);
    |       -------------------------------------------------------
    |       |
    |       doesn't satisfy `_: std::cmp::PartialEq`
    |       doesn't satisfy `_: std::iter::Iterator`
    |
    = note: the following trait bounds were not satisfied:
            `<impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex: std::cmp::PartialEq`
            which is required by `fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::cmp::PartialEq`
            `fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::iter::Iterator`
            which is required by `&mut fuzzcheck::mutators::tuples::tuple7::RecursingPartIndex<<M0 as fuzzcheck::Mutator<types::RegisterKind>>::RecursingPartIndex, <M1 as fuzzcheck::Mutator<types::AuthenticationData>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <M3 as fuzzcheck::Mutator<bool>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex, <impl fuzzcheck::Mutator<std::string::String> as fuzzcheck::Mutator<std::string::String>>::RecursingPartIndex>: std::iter::Iterator`
    = note: this error originates in the macro `make_mutator` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: the trait bound `[closure@conduit-fuzzer/src/tests.rs:8:39: 30:6]: fuzzcheck::builder::FuzzTestFunction<_, _, _>` is not satisfied
   --> conduit-fuzzer/src/tests.rs:8:18
    |
8   |     let result = fuzzcheck::fuzz_test(|data: crate::types::DummyRegistrationJson| {
    |                  ^^^^^^^^^^^^^^^^^^^^ the trait `fuzzcheck::builder::FuzzTestFunction<_, _, _>` is not implemented for `[closure@conduit-fuzzer/src/tests.rs:8:39: 30:6]`
    |
note: required by a bound in `fuzzcheck::fuzz_test`
   --> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fuzzcheck-0.9.0/src/builder.rs:260:8
    |
260 |     F: FuzzTestFunction<T::Owned, T, TestFunctionKind>,
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `fuzzcheck::fuzz_test`

error[E0277]: the trait bound `[closure@conduit-fuzzer/src/tests.rs:8:39: 30:6]: fuzzcheck::builder::FuzzTestFunction<_, _, _>` is not satisfied
  --> conduit-fuzzer/src/tests.rs:8:18
   |
8  |       let result = fuzzcheck::fuzz_test(|data: crate::types::DummyRegistrationJson| {
   |  __________________^
9  | |         println!("{:?}", data);
10 | |         let data = serde_json::to_string(&data);
11 | |         if let Ok(data) = data {
...  |
29 | |         }
30 | |     })
   | |______^ the trait `fuzzcheck::builder::FuzzTestFunction<_, _, _>` is not implemented for `[closure@conduit-fuzzer/src/tests.rs:8:39: 30:6]`

Some errors have detailed explanations: E0277, E0599.
For more information about an error, try `rustc --explain E0277`.
error: could not compile `conduit-fuzzer` due to 14 previous errors

@loiclec
Copy link
Owner

loiclec commented Nov 28, 2021

ah, I got rid of all those trait requirements recently, but forgot those changes didn't make it to fuzzcheck 0.9.

I'll publish a quick update next week so that you can run this code, and maybe ship a String mutator as well. Sorry about this!

@MTRNord
Copy link

MTRNord commented Nov 28, 2021

ah, I got rid of all those trait requirements recently, but forgot those changes didn't make it to fuzzcheck 0.9.

I'll publish a quick update next week so that you can run this code, and maybe ship a String mutator as well. Sorry about this!

Ah ok :) No problem 👍

@loiclec
Copy link
Owner

loiclec commented Dec 5, 2021

Hello! I have released fuzzcheck 0.10 with a default string mutator based on Vec<u8> as written in the example above.

@MTRNord
Copy link

MTRNord commented Dec 5, 2021

Thanks, it seems to work now :)

@MTRNord
Copy link

MTRNord commented Aug 12, 2022

But I've temporarily removed grammar-based string mutators because they were broken. So for now, all the grammar-based stuff can only produce values of type AST, and they can't be used to generate a String within a struct.

So for a proper solution, you may need to wait maybe a month or two :(

Hi. was there any update on this? :)

@loiclec
Copy link
Owner

loiclec commented Aug 14, 2022

No, sorry, I don't see how to do it :/ What I'll do then in the meantime is provide a naive implementation of it. In the documentation, it will say that you can't use it for ambiguous grammars such as (ab|a|b)+. But for stuff like @<userpart>:<serverpart>, it should work fine. Would that be okay?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants