supercode-harness 0.4.19

The optional native Supercode agent and tool harness
Documentation
//! The workflow layer's read door: `harness.v1.workflow.load`, the same code the `supercode
//! workflow load` verb calls. A harness's board is read as one typed [`Workflow`] value; the
//! board is written only through the harness's own door (`hermes kanban …`), never here.
use std::path::Path;

use serde::{Deserialize, Serialize};
use supercode_interchange::workflow::Workflow;

use crate::Result;

/// Which harness's board is read.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum WorkflowHarness {
    /// Hermes's Kanban: `kanban/kanban.db` and `kanban/boards/<slug>/kanban.db` under the home.
    Hermes,
}

/// What a load answers.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkflowRead {
    /// The boards.
    pub workflow: Workflow,
}

/// Read a harness's board as one workflow value.
pub fn load(from: WorkflowHarness, home: &Path) -> Result<WorkflowRead> {
    let workflow = match from {
        WorkflowHarness::Hermes => {
            supercode_interchange::workflow::codec::hermes::from_hermes(home)?
        }
    };
    Ok(WorkflowRead { workflow })
}