wekan-cli 0.11.0

Agent-first, human-friendly command-line client for Wekan
Documentation
use super::formatting::{escape_terminal_controls, render_named_value};
use crate::command_result::{
    CommentCollectionSuccess, CommentCreateSuccess, CommentDeleteSuccess, CommentDetail,
};

pub(super) fn render_comment_collection(data: &CommentCollectionSuccess) -> String {
    if data.comments.is_empty() {
        return format!(
            "No comments found on card {} on board {}.",
            escape_terminal_controls(&data.card_id),
            escape_terminal_controls(&data.board_id)
        );
    }
    let mut lines = vec!["ID  TEXT  AUTHOR".to_owned()];
    lines.extend(data.comments.iter().map(|comment| {
        format!(
            "{}  {}  {}",
            escape_terminal_controls(&comment.comment_id),
            escape_terminal_controls(&comment.text),
            escape_terminal_controls(&comment.author_id)
        )
    }));
    lines.join("\n")
}

pub(super) fn render_comment_detail(data: &CommentDetail) -> String {
    let value = serde_json::to_value(data).expect("comment documents are always serializable");
    let serde_json::Value::Object(mut fields) = value else {
        unreachable!("comment documents serialize as objects")
    };
    fields.remove("comment_id");
    fields.remove("text");

    let mut lines = vec![
        format!("Comment ID: {}", escape_terminal_controls(&data.comment_id)),
        format!("Text: {}", escape_terminal_controls(&data.text)),
    ];
    for (name, value) in fields {
        if !value.is_null() {
            render_named_value(&mut lines, 0, &name, &value);
        }
    }
    lines.join("\n")
}

pub(super) fn render_comment_created(data: &CommentCreateSuccess) -> String {
    format!(
        "Created comment {} on card {} on board {}.",
        escape_terminal_controls(&data.comment_id),
        escape_terminal_controls(&data.card_id),
        escape_terminal_controls(&data.board_id)
    )
}

pub(super) fn render_comment_deleted(data: &CommentDeleteSuccess) -> String {
    format!(
        "Permanently deleted comment {} from card {} on board {}.",
        escape_terminal_controls(&data.comment_id),
        escape_terminal_controls(&data.card_id),
        escape_terminal_controls(&data.board_id)
    )
}