1use serde::{Deserialize, Serialize};
4
5use super::ExtensionMap;
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
9#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
10#[serde(rename_all = "camelCase")]
11pub struct PipelineLineage {
12 #[serde(default, skip_serializing_if = "Vec::is_empty")]
14 pub datasets: Vec<DatasetLineage>,
15 #[serde(default, skip_serializing_if = "Vec::is_empty")]
17 pub steps: Vec<StepLineage>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
20 pub provenance: Option<PipelineProvenance>,
21 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub audit: Option<LineageAudit>,
24 #[serde(default, flatten)]
26 pub extensions: ExtensionMap,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
32#[serde(rename_all = "camelCase")]
33pub struct DatasetLineage {
34 pub dataset: String,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub produced_by: Option<String>,
39 #[serde(default, skip_serializing_if = "Vec::is_empty")]
41 pub consumed_by: Vec<String>,
42 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub contract_ref: Option<String>,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
47 pub transform_ref: Option<String>,
48 #[serde(default, flatten)]
50 pub extensions: ExtensionMap,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
55#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
56#[serde(rename_all = "camelCase")]
57pub struct StepLineage {
58 #[serde(rename = "stepId")]
60 pub step_id: String,
61 #[serde(default, skip_serializing_if = "Vec::is_empty")]
63 pub predecessors: Vec<String>,
64 #[serde(default, skip_serializing_if = "Vec::is_empty")]
66 pub successors: Vec<String>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub dependency_kind: Option<String>,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
72 pub contract_ref: Option<String>,
73 #[serde(default, flatten)]
75 pub extensions: ExtensionMap,
76}
77
78#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
80#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
81#[serde(rename_all = "camelCase")]
82pub struct PipelineProvenance {
83 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub originating: Option<String>,
86 #[serde(default, skip_serializing_if = "Vec::is_empty")]
88 pub parents: Vec<String>,
89 #[serde(default, skip_serializing_if = "Vec::is_empty")]
91 pub nested: Vec<String>,
92 #[serde(default, skip_serializing_if = "Vec::is_empty")]
94 pub imported: Vec<String>,
95 #[serde(default, skip_serializing_if = "Vec::is_empty")]
97 pub version_history: Vec<String>,
98 #[serde(default, flatten)]
100 pub extensions: ExtensionMap,
101}
102
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
105#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
106#[serde(rename_all = "camelCase")]
107pub struct LineageAudit {
108 #[serde(default, skip_serializing_if = "Vec::is_empty")]
110 pub contract_ids: Vec<String>,
111 #[serde(default, skip_serializing_if = "Vec::is_empty")]
113 pub version_ids: Vec<String>,
114 #[serde(default, skip_serializing_if = "Vec::is_empty")]
116 pub timestamps: Vec<String>,
117 #[serde(default, flatten)]
119 pub extensions: ExtensionMap,
120}