tiny-counter 0.1.0

Track event counts across time windows with fixed memory and fast queries
Documentation
// Basic event recording and querying.
//
// This example shows how to:
// - Create an EventStore
// - Record events with plain string IDs
// - Query counts across different time windows
// - Check when events last occurred

use tiny_counter::EventStore;

fn main() {
    println!("=== Basic Usage ===\n");

    // Create a new event store with default configuration
    let store = EventStore::new();

    // Record events as they happen
    println!("Recording events:");
    store.record("app_launch");
    store.record("app_launch");
    store.record("button_click");
    println!("  Recorded 2 launches, 1 click\n");

    // Record multiple occurrences at once
    store.record_count("api_call", 5);
    println!("  Recorded 5 API calls\n");

    // Query event counts across different time windows
    println!("Querying counts:");

    let launches = store.query("app_launch").last_days(7).sum().unwrap_or(0);
    println!("  App launches in last 7 days: {}", launches);

    let clicks = store
        .query("button_click")
        .last_hours(24)
        .sum()
        .unwrap_or(0);
    println!("  Button clicks in last 24 hours: {}", clicks);

    let api_calls = store.query("api_call").last_minutes(60).sum().unwrap_or(0);
    println!("  API calls in last 60 minutes: {}\n", api_calls);

    // Check when events last occurred
    println!("Last seen times:");

    if let Some(duration) = store.query("app_launch").last_seen() {
        println!("  App launch: {} seconds ago", duration.num_seconds());
    }

    if let Some(duration) = store.query("button_click").last_seen() {
        println!("  Button click: {} seconds ago", duration.num_seconds());
    }

    // Query for an event that never happened
    if store.query("never_happened").last_seen().is_none() {
        println!("  never_happened: never occurred\n");
    }

    // Query at multiple time scales
    println!("Same event at different time scales:");
    let last_hour = store.query("api_call").last_minutes(60).sum().unwrap_or(0);
    let last_day = store.query("api_call").last_hours(24).sum().unwrap_or(0);
    let last_week = store.query("api_call").last_days(7).sum().unwrap_or(0);

    println!("  API calls last hour: {}", last_hour);
    println!("  API calls last day: {}", last_day);
    println!("  API calls last week: {}", last_week);

    println!("\n✓ Basic usage complete!");
}