use serde::{Deserialize, Serialize};
use super::ExtensionMap;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct PipelineLineage {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub datasets: Vec<DatasetLineage>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub steps: Vec<StepLineage>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provenance: Option<PipelineProvenance>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub audit: Option<LineageAudit>,
#[serde(default, flatten)]
pub extensions: ExtensionMap,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct DatasetLineage {
pub dataset: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub produced_by: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub consumed_by: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub contract_ref: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub transform_ref: Option<String>,
#[serde(default, flatten)]
pub extensions: ExtensionMap,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct StepLineage {
#[serde(rename = "stepId")]
pub step_id: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub predecessors: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub successors: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dependency_kind: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub contract_ref: Option<String>,
#[serde(default, flatten)]
pub extensions: ExtensionMap,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct PipelineProvenance {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub originating: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub parents: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub nested: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub imported: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub version_history: Vec<String>,
#[serde(default, flatten)]
pub extensions: ExtensionMap,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct LineageAudit {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub contract_ids: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub version_ids: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub timestamps: Vec<String>,
#[serde(default, flatten)]
pub extensions: ExtensionMap,
}