1use arbitrary::{Arbitrary, Result, Unstructured};
2
3#[derive(Debug, Clone)]
4#[cfg_attr(feature = "clap", derive(clap::Parser))]
5pub struct Config {
6 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_packages))]
7 pub max_packages: usize,
8 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_type_size))]
9 pub max_type_size: usize,
10 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_interface_items))]
11 pub max_interface_items: usize,
12 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_world_items))]
13 pub max_world_items: usize,
14 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_pkg_items))]
15 pub max_pkg_items: usize,
16 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_type_parts))]
17 pub max_type_parts: usize,
18 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_files_per_package))]
19 pub max_files_per_package: usize,
20 #[cfg_attr(feature = "clap", clap(long, default_value_t = Config::default().max_resource_items))]
21 pub max_resource_items: usize,
22}
23
24impl Default for Config {
25 fn default() -> Config {
26 Config {
27 max_packages: 10,
28 max_type_size: 100,
29 max_interface_items: 10,
30 max_world_items: 10,
31 max_pkg_items: 10,
32 max_type_parts: 10,
33 max_files_per_package: 10,
34 max_resource_items: 10,
35 }
36 }
37}
38
39impl Arbitrary<'_> for Config {
40 fn arbitrary(u: &mut Unstructured<'_>) -> Result<Config> {
41 Ok(Config {
42 max_packages: u.int_in_range(1..=20)?,
43 max_files_per_package: u.int_in_range(1..=10)?,
44 max_type_size: u.int_in_range(0..=1000)?,
45 max_interface_items: u.int_in_range(0..=20)?,
46 max_world_items: u.int_in_range(0..=10)?,
47 max_pkg_items: u.int_in_range(1..=10)?,
48 max_type_parts: u.int_in_range(1..=10)?,
49 max_resource_items: u.int_in_range(0..=10)?,
50 })
51 }
52}