use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::ids::{ArtifactKey, NodeId, Sha256Hash};
use super::spec::NodeTypeV1;
pub use crate::generated::{
NodeErrorV0, NodeStatusV0, RunCostLineItemV0, RunCostSummaryV0, RunStatusV0,
};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PayloadInfoV0 {
pub bytes: u64,
pub sha256: Sha256Hash,
pub included: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PayloadArtifactV0 {
pub artifact_key: ArtifactKey,
pub info: PayloadInfoV0,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct NodeResultV0 {
pub id: NodeId,
#[serde(rename = "type")]
pub node_type: NodeTypeV1,
pub status: NodeStatusV0,
#[serde(skip_serializing_if = "Option::is_none")]
pub started_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ended_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<NodeErrorV0>,
}