datagen_rs/schema/
plugin.rs

1use crate::schema::transform::Transform;
2#[cfg(feature = "schema")]
3use schemars::JsonSchema;
4#[cfg(feature = "serialize")]
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7
8#[derive(Debug, Clone)]
9#[cfg_attr(feature = "schema", derive(JsonSchema))]
10#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
11#[cfg_attr(feature = "serialize", serde(rename_all = "camelCase"))]
12pub struct Plugin {
13    pub plugin_name: String,
14    pub args: Option<Value>,
15    pub transform: Option<Vec<Transform>>,
16}
17
18#[cfg(feature = "generate")]
19pub mod generate {
20    use crate::generate::current_schema::CurrentSchemaRef;
21    use crate::generate::generated_schema::generate::IntoGeneratedArc;
22    use crate::generate::generated_schema::GeneratedSchema;
23    use crate::schema::plugin::Plugin;
24    use crate::schema::transform::Transform;
25    use crate::util::types::Result;
26    use std::sync::Arc;
27
28    impl IntoGeneratedArc for Plugin {
29        fn into_generated_arc(self, schema: CurrentSchemaRef) -> Result<Arc<GeneratedSchema>> {
30            schema
31                .get_plugin(&self.plugin_name)?
32                .generate(schema.clone(), self.args.unwrap_or_default())
33        }
34
35        fn get_transform(&self) -> Option<Vec<Transform>> {
36            self.transform.clone()
37        }
38    }
39}