wit_smith/
config.rs

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}