systemprompt-logging 0.2.0

Core logging module for systemprompt.io OS
Documentation
use std::io::Write;

use crate::services::cli::theme::BrandColors;

fn stdout_writeln(args: std::fmt::Arguments<'_>) {
    let mut out = std::io::stdout();
    let _ = writeln!(out, "{args}");
}

pub fn render_startup_banner(subtitle: Option<&str>) {
    stdout_writeln(format_args!(""));
    stdout_writeln(format_args!(
        "{}{}{}{}{}",
        BrandColors::primary_bold("</"),
        BrandColors::white_bold("SYSTEMPROMPT"),
        BrandColors::primary_bold("."),
        BrandColors::white("io"),
        BrandColors::primary_bold(">")
    ));
    if let Some(text) = subtitle {
        stdout_writeln(format_args!("{}", BrandColors::dim(text)));
    }
    stdout_writeln(format_args!(""));
}

pub fn render_phase_header(name: &str) {
    stdout_writeln(format_args!(
        "\n{} {}",
        BrandColors::primary("\u{25b8}"),
        BrandColors::white_bold(name)
    ));
}

pub fn render_phase_item(icon: &str, message: &str, detail: Option<&str>) {
    match detail {
        Some(d) => stdout_writeln(format_args!(
            "  {} {} {}",
            icon,
            message,
            BrandColors::dim(format!("({})", d))
        )),
        None => stdout_writeln(format_args!("  {} {}", icon, message)),
    }
}

pub fn render_phase_success(message: &str, detail: Option<&str>) {
    render_phase_item(
        &format!("{}", BrandColors::running("\u{2713}")),
        message,
        detail,
    );
}

pub fn render_phase_info(message: &str, detail: Option<&str>) {
    render_phase_item(
        &format!("{}", BrandColors::highlight("\u{2139}")),
        message,
        detail,
    );
}

pub fn render_phase_warning(message: &str, detail: Option<&str>) {
    render_phase_item(
        &format!("{}", BrandColors::starting("\u{26a0}")),
        message,
        detail,
    );
}