datagen_rs/schema/
bool.rs

1use crate::schema::transform::Transform;
2#[cfg(feature = "schema")]
3use schemars::JsonSchema;
4#[cfg(feature = "serialize")]
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone)]
8#[cfg_attr(feature = "schema", derive(JsonSchema))]
9#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
10#[cfg_attr(feature = "serialize", serde(untagged))]
11pub enum Bool {
12    Random {
13        probability: Option<f64>,
14        transform: Option<Vec<Transform>>,
15    },
16    Constant {
17        value: bool,
18        transform: Option<Vec<Transform>>,
19    },
20}
21
22#[cfg(feature = "generate")]
23pub mod generate {
24    use crate::generate::current_schema::CurrentSchemaRef;
25    use crate::generate::generated_schema::generate::IntoGenerated;
26    use crate::generate::generated_schema::GeneratedSchema;
27    use crate::schema::bool::Bool;
28    use crate::schema::transform::Transform;
29    use crate::util::types::Result;
30    use rand::Rng;
31
32    impl IntoGenerated for Bool {
33        fn into_generated(self, _: CurrentSchemaRef) -> Result<GeneratedSchema> {
34            Ok(match self {
35                Bool::Constant { value, .. } => GeneratedSchema::Bool(value),
36                Bool::Random { probability, .. } => {
37                    let mut rng = rand::thread_rng();
38                    let value = rng.gen_bool(probability.unwrap_or(0.5));
39                    GeneratedSchema::Bool(value)
40                }
41            })
42        }
43
44        fn get_transform(&self) -> Option<Vec<Transform>> {
45            match self {
46                Bool::Constant { transform, .. } => transform.clone(),
47                Bool::Random { transform, .. } => transform.clone(),
48            }
49        }
50    }
51}