rho-coding-agent 1.40.0

A lightweight agent harness inspired by Pi
Documentation
use crate::tui::{
    markdown::mermaid::{
        model::{ClassInfo, Graph},
        MermaidArt,
    },
    terminal_graph::{
        self, Compartment, GraphStyles, NodeExtra, Oversize, TextAlignment, WRAP_WIDTH,
    },
};

pub(super) fn render_class(
    graph: &Graph,
    infos: &[ClassInfo],
    styles: &GraphStyles,
    max_width: Option<usize>,
) -> Result<MermaidArt, Oversize> {
    let extras: Vec<NodeExtra> = graph
        .nodes
        .iter()
        .zip(infos)
        .map(|(node, info)| {
            let mut title = Vec::new();
            for annotation in &info.annotations {
                title.push(format!("«{annotation}»"));
            }
            title.push(node.label.clone());
            NodeExtra::Compartments(vec![
                Compartment {
                    lines: title,
                    alignment: TextAlignment::Center,
                },
                Compartment {
                    lines: info.attrs.clone(),
                    alignment: TextAlignment::Left,
                },
                Compartment {
                    lines: info.methods.clone(),
                    alignment: TextAlignment::Left,
                },
            ])
        })
        .collect();
    let graph = graph.layout_graph();
    let layout = terminal_graph::layout_canvas(&graph, &extras, max_width, WRAP_WIDTH)?;
    let art = terminal_graph::art_from_layout(&graph, layout, styles);
    Ok(MermaidArt {
        styled_lines: art.lines,
        plain_lines: art.plain_lines,
    })
}