use serde::{Deserialize, Serialize};
use crate::lineage::{EdgeRole, ResolveStatus};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum NodeStatus {
#[default]
#[serde(other)]
Observed,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EdgeStatus {
#[default]
#[serde(other)]
Active,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Node {
pub title: String,
pub created_at: String,
pub clip_type: String,
pub task: String,
pub is_remix: bool,
pub is_trashed: bool,
pub status: NodeStatus,
pub first_seen_at: String,
pub last_seen_at: String,
}
impl Default for Node {
fn default() -> Self {
Self {
title: String::new(),
created_at: String::new(),
clip_type: String::new(),
task: String::new(),
is_remix: false,
is_trashed: false,
status: NodeStatus::Observed,
first_seen_at: String::new(),
last_seen_at: String::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct StoredEdge {
pub child_id: String,
pub parent_id: String,
pub edge_type: String,
pub role: EdgeRole,
pub source_field: String,
pub ordinal: u32,
pub status: EdgeStatus,
pub first_seen_at: String,
pub last_seen_at: String,
}
impl Default for StoredEdge {
fn default() -> Self {
Self {
child_id: String::new(),
parent_id: String::new(),
edge_type: String::new(),
role: EdgeRole::Primary,
source_field: String::new(),
ordinal: 0,
status: EdgeStatus::Active,
first_seen_at: String::new(),
last_seen_at: String::new(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct CacheEntry {
pub root_id: String,
pub status: ResolveStatus,
pub algorithm_version: u32,
pub computed_at: String,
}