daat-locus 0.4.0

A long-running local agent runtime with memory, workflows, apps, and sleep-time self-improvement.
use serde::{Deserialize, Serialize};

use crate::activity_event::{PlanActivityDescriptor, PlanActivityKind, PlanStepActivityStatus};

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct PlanActivityData {
    #[serde(default)]
    pub kind: PlanActivityKind,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub explanation: Option<String>,
    pub steps: Vec<PlanStepActivityData>,
}

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct PlanStepActivityData {
    pub status: PlanStepDisplayStatus,
    pub text: String,
}

#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum PlanStepDisplayStatus {
    Pending,
    InProgress,
    Completed,
}

impl From<PlanActivityDescriptor> for PlanActivityData {
    fn from(data: PlanActivityDescriptor) -> Self {
        Self {
            kind: data.kind,
            explanation: data.explanation,
            steps: data
                .steps
                .into_iter()
                .map(|step| PlanStepActivityData {
                    status: match step.status {
                        PlanStepActivityStatus::Pending => PlanStepDisplayStatus::Pending,
                        PlanStepActivityStatus::InProgress => PlanStepDisplayStatus::InProgress,
                        PlanStepActivityStatus::Completed => PlanStepDisplayStatus::Completed,
                    },
                    text: step.text,
                })
                .collect(),
        }
    }
}