feat(api): Ergonomic improvements and derive macro for FuzzerState #19
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR introduces significant ergonomic improvements to the
canfuzzAPI, making it easier and less verbose to set up new fuzzers.Key Changes
CanisterBuilderandFuzzerBuilderto simplify the creation ofCanisterInfoandFuzzerState.CanisterBuildersupports a fluent interface for setting properties like Wasm path (file or env var), canister type (coverage/support), and initialization arguments.FuzzerState::setup_canisters()method. This helper automates the initialization ofPocketIc, creation of canisters, and installation of Wasm modules, replacing ~10-15 lines of boilerplate in theinit()method of every fuzzer.FuzzerStateProvidertrait with standardAsRef<FuzzerState>andAsMut<FuzzerState>bounds onFuzzerOrchestrator.canfuzz_derivecrate (exposed via thederivefeature incanfuzz) providing a#[derive(FuzzerState)]macro. This automatically implements the required traits for fuzzer structs wrappingFuzzerState.CanisterBuilder::with_init_args(Option<Vec<u8>>).Before:
After: