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§
Sourcefn format_daily(&self, data: &[DailyUsage], totals: &Totals) -> String
fn format_daily(&self, data: &[DailyUsage], totals: &Totals) -> String
Format daily usage data with totals
Sourcefn format_daily_by_instance(
&self,
data: &[DailyInstanceUsage],
totals: &Totals,
) -> String
fn format_daily_by_instance( &self, data: &[DailyInstanceUsage], totals: &Totals, ) -> String
Format daily usage data grouped by instance
Sourcefn format_sessions(
&self,
data: &[SessionUsage],
totals: &Totals,
tz: &Tz,
) -> String
fn format_sessions( &self, data: &[SessionUsage], totals: &Totals, tz: &Tz, ) -> String
Format session usage data with totals
Sourcefn format_monthly(&self, data: &[MonthlyUsage], totals: &Totals) -> String
fn format_monthly(&self, data: &[MonthlyUsage], totals: &Totals) -> String
Format monthly usage data with totals
Sourcefn format_weekly(&self, data: &[WeeklyUsage], totals: &Totals) -> String
fn format_weekly(&self, data: &[WeeklyUsage], totals: &Totals) -> String
Format weekly usage data with totals
Sourcefn format_blocks(&self, data: &[SessionBlock], tz: &Tz) -> String
fn format_blocks(&self, data: &[SessionBlock], tz: &Tz) -> String
Format billing blocks (5-hour windows)