sbrd_gen/generator/primitive/
bool_generator.rs

1use crate::builder::GeneratorBuilder;
2use crate::error::{BuildError, GenerateError};
3use crate::generator::{GeneratorBase, Randomizer};
4use crate::value::{DataValue, DataValueMap};
5use crate::GeneratorType;
6
7/// The generator with generate [`DataValue::Bool`] value
8///
9/// [`DataValue::Bool`]: ../../value/enum.DataValue.html#variant.Bool
10#[derive(Debug, PartialEq, Eq, Clone)]
11pub struct BoolGenerator {
12    nullable: bool,
13}
14
15impl<R: Randomizer + ?Sized> GeneratorBase<R> for BoolGenerator {
16    fn create(builder: GeneratorBuilder) -> Result<Self, BuildError>
17    where
18        Self: Sized,
19    {
20        let GeneratorBuilder {
21            generator_type,
22            nullable,
23            ..
24        } = builder;
25
26        if generator_type != GeneratorType::Bool {
27            return Err(BuildError::InvalidType(generator_type));
28        }
29
30        Ok(Self { nullable })
31    }
32
33    fn is_nullable(&self) -> bool {
34        self.nullable
35    }
36
37    fn generate_without_null(
38        &self,
39        rng: &mut R,
40        _context: &DataValueMap<&str>,
41    ) -> Result<DataValue, GenerateError> {
42        Ok(DataValue::Bool(rng.gen_bool(0.5)))
43    }
44}