datagen_rs/schema/
integer.rs1use 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, deny_unknown_fields))]
11pub enum Integer {
12 Random {
13 #[cfg_attr(feature = "serialize", serde(skip_serializing_if = "Option::is_none"))]
14 min: Option<i64>,
15 #[cfg_attr(feature = "serialize", serde(skip_serializing_if = "Option::is_none"))]
16 max: Option<i64>,
17 transform: Option<Vec<Transform>>,
18 },
19 Constant {
20 value: i64,
21 transform: Option<Vec<Transform>>,
22 },
23}
24
25#[cfg(feature = "generate")]
26pub mod generate {
27 use crate::generate::current_schema::CurrentSchemaRef;
28 use crate::generate::generated_schema::generate::IntoGenerated;
29 use crate::generate::generated_schema::GeneratedSchema;
30 use crate::schema::integer::Integer;
31 use crate::schema::transform::Transform;
32 use crate::util::types::Result;
33 use rand::Rng;
34
35 impl IntoGenerated for Integer {
36 fn into_generated(self, _: CurrentSchemaRef) -> Result<GeneratedSchema> {
37 Ok(match self {
38 Integer::Constant { value, .. } => GeneratedSchema::Integer(value),
39 Integer::Random { min, max, .. } => {
40 let mut rng = rand::thread_rng();
41 let min = min.unwrap_or(i64::MIN);
42 let max = max.unwrap_or(i64::MAX);
43 let value = rng.gen_range(min..=max);
44 GeneratedSchema::Integer(value)
45 }
46 })
47 }
48
49 fn get_transform(&self) -> Option<Vec<Transform>> {
50 match self {
51 Integer::Constant { transform, .. } => transform.clone(),
52 Integer::Random { transform, .. } => transform.clone(),
53 }
54 }
55 }
56}