Skip to main content

supercode_harness/
workflow_doors.rs

1//! The workflow layer's read door: `harness.v1.workflow.load`, the same code the `supercode
2//! workflow load` verb calls. A harness's board is read as one typed [`Workflow`] value; the
3//! board is written only through the harness's own door (`hermes kanban …`), never here.
4use std::path::Path;
5
6use serde::{Deserialize, Serialize};
7use supercode_interchange::workflow::Workflow;
8
9use crate::Result;
10
11/// Which harness's board is read.
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
13#[serde(rename_all = "lowercase")]
14pub enum WorkflowHarness {
15    /// Hermes's Kanban: `kanban/kanban.db` and `kanban/boards/<slug>/kanban.db` under the home.
16    Hermes,
17}
18
19/// What a load answers.
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct WorkflowRead {
22    /// The boards.
23    pub workflow: Workflow,
24}
25
26/// Read a harness's board as one workflow value.
27pub fn load(from: WorkflowHarness, home: &Path) -> Result<WorkflowRead> {
28    let workflow = match from {
29        WorkflowHarness::Hermes => {
30            supercode_interchange::workflow::codec::hermes::from_hermes(home)?
31        }
32    };
33    Ok(WorkflowRead { workflow })
34}