statbook 0.0.1

A Rust library for accessing sports statistics and data (early development)
Documentation
# Statbook

[![CI](https://github.com/daguenette/statbook/workflows/CI/badge.svg)](https://github.com/daguenette/statbook/actions)
[![Crates.io](https://img.shields.io/crates/v/statbook.svg)](https://crates.io/crates/statbook)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-blue.svg)](https://github.com/yourusername/nfl-stats-funtimes#license)
[![Rust Version](https://img.shields.io/badge/rust-1.70+-blue.svg)](https://www.rust-lang.org)

A Rust library for accessing sports statistics and data.

Currently supports NFL player data via [MySportsFeeds.com](https://www.mysportsfeeds.com) with plans to expand to other sports and data sources.

## Setup

### 1. Get MySportsFeeds Credentials

Sign up for a free account at [MySportsFeeds.com](https://www.mysportsfeeds.com) to get your API credentials.

### 2. Add to Cargo.toml

```toml
[dependencies]
statbook = "0.1.0"
tokio = { version = "1.0", features = ["full"] }
```

### 3. Set Environment Variables

```bash
export STATBOOK_API_KEY="your-api-key"
export STATBOOK_PASSWORD="your-password"
```

## Quick Start

```rust
use statbook::{StatbookClient, api::players::get_player_by_name};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = StatbookClient::from_env()?;
    
    if let Some(player) = get_player_by_name(&client, "tom-brady").await? {
        println!("{} {} - #{}", player.first_name, player.last_name, player.jersey_number);
        println!("Position: {}", player.primary_position);
        println!("Team: {}", player.current_team);
        println!("Games Played: {}", player.games_played);
    }
    
    Ok(())
}
```

## Configuration Options

### Environment Variables (Recommended)

```rust
use statbook::StatbookClient;

let client = StatbookClient::from_env()?;
```

### Builder Pattern

```rust
use statbook::{StatbookClient, StatbookConfig};

let config = StatbookConfig::builder()
    .api_key("your-api-key")
    .password("your-password")
    .build()?;
    
let client = StatbookClient::new(config);
```

### Direct Configuration

```rust
use statbook::{StatbookClient, StatbookConfig};

let config = StatbookConfig::new(
    "your-api-key".to_string(), 
    "your-password".to_string()
);
let client = StatbookClient::new(config);
```

## API Reference

### Players

```rust
use statbook::api::players::get_player_by_name;

// Get player summary
let player = get_player_by_name(&client, "josh-allen").await?;
```

### Types

```rust
use statbook::models::PlayerSummary;

// PlayerSummary contains:
// - first_name: String
// - last_name: String  
// - primary_position: String
// - jersey_number: u32
// - current_team: String
// - injury: String
// - rookie: bool
// - games_played: u64
```

## Error Handling

```rust
use statbook::{StatbookClient, StatbookError};

match StatbookClient::from_env() {
    Ok(client) => {
        // Use client
    }
    Err(StatbookError::MissingApiKey) => {
        eprintln!("Please set STATBOOK_API_KEY environment variable");
    }
    Err(StatbookError::MissingPassword) => {
        eprintln!("Please set STATBOOK_PASSWORD environment variable");
    }
    Err(e) => {
        eprintln!("Error: {}", e);
    }
}
```

## Future Plans

- Finish NFL player and team statistics
- More comprehensive NFL data (forecasting, games, seasons)
- Additional sports (NHL, NBA, etc.)
- Additional data providers beyond MySportsFeeds

## License

Licensed under either of

- Apache License, Version 2.0
- MIT license

at your option.