Skip to main content

OutputFormatter

Trait OutputFormatter 

Source
pub trait OutputFormatter {
    // Required methods
    fn format_daily(&self, data: &[DailyUsage], totals: &Totals) -> String;
    fn format_daily_by_instance(
        &self,
        data: &[DailyInstanceUsage],
        totals: &Totals,
    ) -> String;
    fn format_sessions(
        &self,
        data: &[SessionUsage],
        totals: &Totals,
        tz: &Tz,
    ) -> String;
    fn format_monthly(&self, data: &[MonthlyUsage], totals: &Totals) -> String;
    fn format_weekly(&self, data: &[WeeklyUsage], totals: &Totals) -> String;
    fn format_blocks(&self, data: &[SessionBlock], tz: &Tz) -> String;
}
Expand description

Trait for output formatters

This trait defines the interface for formatting various types of usage data. Implementations can provide different output formats (table, JSON, CSV, etc.).

§Example Implementation

use ccstat_terminal::output::OutputFormatter;
use ccstat_core::aggregation_types::{DailyUsage, DailyInstanceUsage, SessionUsage, MonthlyUsage, WeeklyUsage, SessionBlock, Totals};

struct CustomFormatter;

impl OutputFormatter for CustomFormatter {
    fn format_daily(&self, data: &[DailyUsage], totals: &Totals) -> String {
        format!("Total days: {}, Total cost: ${:.2}", data.len(), totals.total_cost)
    }

    fn format_daily_by_instance(&self, data: &[DailyInstanceUsage], totals: &Totals) -> String {
        format!("Total instances: {}", data.len())
    }

    fn format_sessions(&self, data: &[SessionUsage], totals: &Totals, _tz: &chrono_tz::Tz) -> String {
        format!("Total sessions: {}", data.len())
    }

    fn format_monthly(&self, data: &[MonthlyUsage], totals: &Totals) -> String {
        format!("Total months: {}", data.len())
    }

    fn format_weekly(&self, data: &[WeeklyUsage], totals: &Totals) -> String {
        format!("Total weeks: {}", data.len())
    }

    fn format_blocks(&self, data: &[SessionBlock], _tz: &chrono_tz::Tz) -> String {
        format!("Total blocks: {}", data.len())
    }
}

Required Methods§

Source

fn format_daily(&self, data: &[DailyUsage], totals: &Totals) -> String

Format daily usage data with totals

Source

fn format_daily_by_instance( &self, data: &[DailyInstanceUsage], totals: &Totals, ) -> String

Format daily usage data grouped by instance

Source

fn format_sessions( &self, data: &[SessionUsage], totals: &Totals, tz: &Tz, ) -> String

Format session usage data with totals

Source

fn format_monthly(&self, data: &[MonthlyUsage], totals: &Totals) -> String

Format monthly usage data with totals

Source

fn format_weekly(&self, data: &[WeeklyUsage], totals: &Totals) -> String

Format weekly usage data with totals

Source

fn format_blocks(&self, data: &[SessionBlock], tz: &Tz) -> String

Format billing blocks (5-hour windows)

Implementors§