dune_api/pipelines/
types.rs

1//! Types for the Pipelines API
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6/// Pipeline execution request
7#[derive(Debug, Clone, Serialize)]
8pub struct ExecutePipelineRequest {
9    /// Pipeline definition
10    pub pipeline: Pipeline,
11    /// Query parameters for all queries in the pipeline
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub query_parameters: Option<HashMap<String, String>>,
14    /// Performance tier (medium, large)
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub performance: Option<String>,
17}
18
19/// Pipeline definition
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct Pipeline {
22    /// Pipeline nodes
23    pub nodes: Vec<PipelineNode>,
24}
25
26/// Pipeline node
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct PipelineNode {
29    /// Node type (query_execution, materialized_view_refresh)
30    #[serde(rename = "type")]
31    pub node_type: String,
32    /// Query ID (for query_execution type)
33    pub query_id: Option<i64>,
34    /// Materialized view name (for materialized_view_refresh type)
35    pub matview_name: Option<String>,
36    /// Dependencies (IDs of nodes that must complete first)
37    #[serde(default)]
38    pub depends_on: Vec<String>,
39    /// Node ID
40    pub id: Option<String>,
41}
42
43impl PipelineNode {
44    /// Create a query execution node
45    pub fn query(query_id: i64) -> Self {
46        Self {
47            node_type: "query_execution".to_string(),
48            query_id: Some(query_id),
49            matview_name: None,
50            depends_on: vec![],
51            id: None,
52        }
53    }
54
55    /// Create a materialized view refresh node
56    pub fn matview(name: &str) -> Self {
57        Self {
58            node_type: "materialized_view_refresh".to_string(),
59            query_id: None,
60            matview_name: Some(name.to_string()),
61            depends_on: vec![],
62            id: None,
63        }
64    }
65
66    /// Set node ID
67    pub fn with_id(mut self, id: &str) -> Self {
68        self.id = Some(id.to_string());
69        self
70    }
71
72    /// Set dependencies
73    pub fn depends_on(mut self, deps: Vec<String>) -> Self {
74        self.depends_on = deps;
75        self
76    }
77}
78
79/// Response from executing a pipeline
80#[derive(Debug, Clone, Deserialize, Serialize)]
81pub struct ExecutePipelineResponse {
82    /// Pipeline execution ID
83    pub pipeline_execution_id: Option<String>,
84    /// Node executions
85    #[serde(default)]
86    pub node_executions: Vec<NodeExecution>,
87}
88
89/// Node execution info
90#[derive(Debug, Clone, Deserialize, Serialize)]
91pub struct NodeExecution {
92    /// Node ID
93    pub node_id: Option<String>,
94    /// Execution ID
95    pub execution_id: Option<String>,
96    /// State
97    pub state: Option<String>,
98}
99
100/// Pipeline execution status
101#[derive(Debug, Clone, Deserialize, Serialize)]
102pub struct PipelineExecutionStatus {
103    /// Pipeline execution ID
104    pub pipeline_execution_id: Option<String>,
105    /// Overall state
106    pub state: Option<String>,
107    /// Whether execution is finished
108    pub is_execution_finished: Option<bool>,
109    /// Node statuses
110    #[serde(default)]
111    pub node_executions: Vec<NodeExecutionStatus>,
112}
113
114/// Node execution status
115#[derive(Debug, Clone, Deserialize, Serialize)]
116pub struct NodeExecutionStatus {
117    /// Node ID
118    pub node_id: Option<String>,
119    /// Node type
120    #[serde(rename = "type")]
121    pub node_type: Option<String>,
122    /// Execution ID
123    pub execution_id: Option<String>,
124    /// State
125    pub state: Option<String>,
126    /// Query ID
127    pub query_id: Option<i64>,
128    /// Materialized view name
129    pub matview_name: Option<String>,
130}