qqq-cli 0.8.0

Local-first task queue for coding agent sessions
use super::{clean, field, import};
use serde_json::Value;

pub(super) fn render(value: &Value) -> String {
    let mut text = import::render(value);
    if value["dry_run"] != true {
        return text;
    }
    for task in value["tasks"].as_array().into_iter().flatten() {
        text.push_str(&format!("\n\n{}:\n", field(task, "key")));
        for (index, line) in task["description"]
            .as_str()
            .unwrap_or("")
            .split('\n')
            .enumerate()
        {
            if index != 0 {
                text.push('\n');
            }
            text.push_str("  ");
            text.push_str(&clean(line));
        }
        let tags = task["tags"]
            .as_array()
            .into_iter()
            .flatten()
            .filter_map(Value::as_str)
            .map(clean)
            .collect::<Vec<_>>();
        text.push_str(&format!(
            "\n  Tags: {}",
            if tags.is_empty() {
                "none".to_owned()
            } else {
                tags.join(", ")
            }
        ));
    }
    text
}