use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize)]
pub struct ExecutePipelineRequest {
pub pipeline: Pipeline,
#[serde(skip_serializing_if = "Option::is_none")]
pub query_parameters: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub performance: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Pipeline {
pub nodes: Vec<PipelineNode>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PipelineNode {
#[serde(rename = "type")]
pub node_type: String,
pub query_id: Option<i64>,
pub matview_name: Option<String>,
#[serde(default)]
pub depends_on: Vec<String>,
pub id: Option<String>,
}
impl PipelineNode {
pub fn query(query_id: i64) -> Self {
Self {
node_type: "query_execution".to_string(),
query_id: Some(query_id),
matview_name: None,
depends_on: vec![],
id: None,
}
}
pub fn matview(name: &str) -> Self {
Self {
node_type: "materialized_view_refresh".to_string(),
query_id: None,
matview_name: Some(name.to_string()),
depends_on: vec![],
id: None,
}
}
pub fn with_id(mut self, id: &str) -> Self {
self.id = Some(id.to_string());
self
}
pub fn depends_on(mut self, deps: Vec<String>) -> Self {
self.depends_on = deps;
self
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ExecutePipelineResponse {
pub pipeline_execution_id: Option<String>,
#[serde(default)]
pub node_executions: Vec<NodeExecution>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct NodeExecution {
pub node_id: Option<String>,
pub execution_id: Option<String>,
pub state: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PipelineExecutionStatus {
pub pipeline_execution_id: Option<String>,
pub state: Option<String>,
pub is_execution_finished: Option<bool>,
#[serde(default)]
pub node_executions: Vec<NodeExecutionStatus>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct NodeExecutionStatus {
pub node_id: Option<String>,
#[serde(rename = "type")]
pub node_type: Option<String>,
pub execution_id: Option<String>,
pub state: Option<String>,
pub query_id: Option<i64>,
pub matview_name: Option<String>,
}