Skip to main content

hostcraft_cli/display/
mod.rs

1mod style;
2
3use anstream::eprintln;
4use anstream::println;
5use hostcraft_core::{HostEntry, HostStatus};
6use style::*;
7
8// ── Print functions ───────────────────────────────────────────────────────────
9
10pub fn print_entries(entries: &[HostEntry]) {
11    if entries.is_empty() {
12        println!("{DIM_STYLE}No entries found.{DIM_STYLE:#}");
13        return;
14    }
15
16    for entry in entries {
17        let (status_style, symbol) = match entry.status {
18            HostStatus::Active => (ACTIVE_STYLE, "●"),
19            HostStatus::Inactive => (INACTIVE_STYLE, "○"),
20        };
21
22        println!(
23            "  {IP_STYLE}{ip:<20}{IP_STYLE:#} {NAME_STYLE}{name:<30}{NAME_STYLE:#} {status_style}{symbol} {status}{status_style:#}",
24            ip = entry.ip,
25            name = entry.name,
26            status = entry.status,
27        );
28    }
29}
30
31pub fn print_success(message: &str) {
32    println!("{SUCCESS_STYLE}✓{SUCCESS_STYLE:#} {message}");
33}
34
35pub fn print_error(message: &str) {
36    eprintln!("{ERROR_STYLE}✗ Error:{ERROR_STYLE:#} {message}");
37}
38
39pub fn print_update_notice(latest: &str) {
40    println!(
41        "\n{NOTICE_STYLE}↑ Update available:{NOTICE_STYLE:#} {DIM_STYLE}v{current}{DIM_STYLE:#} → {NOTICE_STYLE}v{latest}{NOTICE_STYLE:#}",
42        current = env!("CARGO_PKG_VERSION"),
43    );
44    println!("  {DIM_STYLE}Run `hostcraft update` to install.{DIM_STYLE:#}");
45}
46
47pub fn print_up_to_date() {
48    println!(
49        "{SUCCESS_STYLE}✓{SUCCESS_STYLE:#} hostcraft is up to date {DIM_STYLE}(v{}){DIM_STYLE:#}",
50        env!("CARGO_PKG_VERSION")
51    );
52}
53
54pub fn print_updating(latest: &str) {
55    println!(
56        "{NOTICE_STYLE}↑{NOTICE_STYLE:#} Updating {DIM_STYLE}v{current}{DIM_STYLE:#} → {NOTICE_STYLE}v{latest}{NOTICE_STYLE:#} ...",
57        current = env!("CARGO_PKG_VERSION"),
58    );
59}