Skip to main content

ccstat_core/
provider.rs

1//! Provider trait for data loaders
2//!
3//! This module defines the `ProviderDataLoader` trait that all provider crates
4//! must implement. It provides a uniform interface for constructing a data loader
5//! and streaming usage entries.
6
7use crate::error::Result;
8use crate::types::UsageEntry;
9use async_trait::async_trait;
10use futures::stream::Stream;
11use std::pin::Pin;
12
13/// Trait for provider-specific data loaders.
14///
15/// Each provider crate (Claude, Codex, OpenCode, Amp, Pi) implements this trait
16/// so that the main binary can dispatch to any provider using generic code.
17#[async_trait]
18pub trait ProviderDataLoader: Send + Sync + Sized {
19    /// Create a new data loader, discovering data directories.
20    async fn new() -> Result<Self>;
21
22    /// Stream all usage entries from the provider's data files.
23    fn load_entries(&self) -> Pin<Box<dyn Stream<Item = Result<UsageEntry>> + Send + '_>>;
24}