wasmtime_fuzzing/generators/async_config.rs
1use arbitrary::{Arbitrary, Unstructured};
2use std::time::Duration;
3
4/// Configuration for async support within a store.
5///
6/// Note that the `Arbitrary` implementation for this type always returns
7/// `Disabled` because this is something that is statically chosen if the fuzzer
8/// has support for async.
9#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10pub enum AsyncConfig {
11 /// No async support enabled.
12 Disabled,
13 /// Async support is enabled and cooperative yielding is done with fuel.
14 YieldWithFuel(u64),
15 /// Async support is enabled and cooperative yielding is done with epochs.
16 YieldWithEpochs {
17 /// Duration between epoch ticks.
18 dur: Duration,
19 /// Number of ticks between yields.
20 ticks: u64,
21 },
22}
23
24impl AsyncConfig {
25 /// Applies this async configuration to the `wasmtime::Config` provided to
26 /// ensure it's ready to execute with the resulting modules.
27 pub fn configure(&self, config: &mut wasmtime::Config) {
28 match self {
29 AsyncConfig::Disabled => {}
30 AsyncConfig::YieldWithFuel(_) => {
31 config.async_support(true).consume_fuel(true);
32 }
33 AsyncConfig::YieldWithEpochs { .. } => {
34 config.async_support(true).epoch_interruption(true);
35 }
36 }
37 }
38}
39
40impl<'a> Arbitrary<'a> for AsyncConfig {
41 fn arbitrary(_: &mut Unstructured<'a>) -> arbitrary::Result<AsyncConfig> {
42 Ok(AsyncConfig::Disabled)
43 }
44}