use crate::models::Provider;
pub struct ProviderTotals<S> {
pub claude: S,
pub codex: S,
pub copilot: S,
pub gemini: S,
pub opencode: S,
pub cursor: S,
pub hermes: S,
pub grok: S,
pub overall: S,
}
impl<S: Default> Default for ProviderTotals<S> {
fn default() -> Self {
Self {
claude: S::default(),
codex: S::default(),
copilot: S::default(),
gemini: S::default(),
opencode: S::default(),
cursor: S::default(),
hermes: S::default(),
grok: S::default(),
overall: S::default(),
}
}
}
impl<S> ProviderTotals<S> {
pub fn get_stats(&self, provider: Provider) -> &S {
match provider {
Provider::ClaudeCode => &self.claude,
Provider::Codex => &self.codex,
Provider::Copilot => &self.copilot,
Provider::Gemini => &self.gemini,
Provider::OpenCode => &self.opencode,
Provider::Cursor => &self.cursor,
Provider::Hermes => &self.hermes,
Provider::Grok => &self.grok,
Provider::Unknown => &self.overall,
}
}
pub fn get_stats_mut(&mut self, provider: Provider) -> &mut S {
match provider {
Provider::ClaudeCode => &mut self.claude,
Provider::Codex => &mut self.codex,
Provider::Copilot => &mut self.copilot,
Provider::Gemini => &mut self.gemini,
Provider::OpenCode => &mut self.opencode,
Provider::Cursor => &mut self.cursor,
Provider::Hermes => &mut self.hermes,
Provider::Grok => &mut self.grok,
Provider::Unknown => &mut self.overall,
}
}
}