sbrd_gen/generator/primitive/
always_null_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 always generate [`DataValue::Null`]
8///
9/// [`DataValue::Null`]: ../../value/enum.DataValue.html#variant.Null
10#[derive(Debug, PartialEq, Eq, Clone)]
11pub struct AlwaysNullGenerator {}
12
13impl<R: Randomizer + ?Sized> GeneratorBase<R> for AlwaysNullGenerator {
14    fn create(builder: GeneratorBuilder) -> Result<Self, BuildError>
15    where
16        Self: Sized,
17    {
18        let GeneratorBuilder { generator_type, .. } = builder;
19
20        if generator_type != GeneratorType::AlwaysNull {
21            return Err(BuildError::InvalidType(generator_type));
22        }
23
24        Ok(Self {})
25    }
26
27    fn is_nullable(&self) -> bool {
28        true
29    }
30
31    fn generate_without_null(
32        &self,
33        _rng: &mut R,
34        _context: &DataValueMap<&str>,
35    ) -> Result<DataValue, GenerateError> {
36        Ok(DataValue::Null)
37    }
38}