wekan-cli 0.21.0

Agent-first, human-friendly command-line client for Wekan
Documentation
use super::formatting::escape_terminal_controls as escape;
use crate::command_result::{BoardImportSuccess, IcsImportSuccess, ZipImportSuccess};

pub(super) fn board(data: &BoardImportSuccess) -> String {
    format!(
        "Board import acknowledged: {} (source: {}).\nMutation unconfirmed; no readback performed.",
        escape(&data.board_id),
        escape(&data.source)
    )
}

pub(super) fn zip(data: &ZipImportSuccess) -> String {
    let c = &data.counts;
    let mut output = format!(
        "ZIP import acknowledged into board {}.\nCounts: {} swimlanes, {} lists, {} cards, {} checklists, {} comments, {} attachments.\nMutation unconfirmed; no readback performed.",
        escape(&data.board_id),
        c.swimlanes,
        c.lists,
        c.cards,
        c.checklists,
        c.comments,
        c.attachments
    );
    for (label, value) in [
        ("Requested swimlane", &data.swimlane_id),
        ("Requested list", &data.list_id),
        ("Requested card", &data.card_id),
        (
            "Requested checklist (ignored by Wekan v11.06)",
            &data.checklist_id,
        ),
    ] {
        if let Some(value) = value {
            output.push_str(&format!("\n{label}: {}", escape(value)));
        }
    }
    output
}

pub(super) fn ics(data: &IcsImportSuccess) -> String {
    format!(
        "ICS import acknowledged into board {}, list {}, swimlane {}.\nCreated: {}\nCard IDs: {}\nMutation unconfirmed; no readback performed.",
        escape(&data.board_id),
        escape(&data.list_id),
        escape(&data.swimlane_id),
        data.created,
        escape(&data.card_ids.join(", "))
    )
}