datagen_rs/schema/
object.rs

1use crate::schema::any_value::AnyValue;
2use crate::schema::transform::Transform;
3use indexmap::IndexMap;
4#[cfg(feature = "schema")]
5use schemars::JsonSchema;
6#[cfg(feature = "serialize")]
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone)]
10#[cfg_attr(feature = "schema", derive(JsonSchema))]
11#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
12pub struct Object {
13    pub properties: IndexMap<String, AnyValue>,
14    pub transform: Option<Vec<Transform>>,
15}
16
17#[cfg(feature = "generate")]
18pub mod generate {
19    use crate::generate::current_schema::CurrentSchemaRef;
20    use crate::generate::generated_schema::generate::IntoGeneratedArc;
21    use crate::generate::generated_schema::{GeneratedSchema, IntoRandom};
22    use crate::generate::schema_mapper::MapSchema;
23    use crate::schema::object::Object;
24    use crate::schema::transform::Transform;
25    use crate::util::types::Result;
26    use std::sync::Arc;
27
28    impl IntoGeneratedArc for Object {
29        fn into_generated_arc(self, schema: CurrentSchemaRef) -> Result<Arc<GeneratedSchema>> {
30            schema.map_index_map(self.properties, None, false, |schema, value| {
31                value.into_random(schema.clone())
32            })
33        }
34
35        fn get_transform(&self) -> Option<Vec<Transform>> {
36            self.transform.clone()
37        }
38    }
39}