brawl-rs 0.1.0

A Rust wrapper for the Brawl Stars API
Documentation
# Brawl API RS 🦀


A fast and async Rust wrapper for the [Brawl Stars API](https://developer.brawlstars.com/).

[![Crates.io](https://img.shields.io/crates/v/brawl-rs.svg)](https://crates.io/crates/brawl-rs)
[![Documentation](https://docs.rs/brawl-rs/badge.svg)](https://docs.rs/brawl-rs)
[![License](https://img.shields.io/crates/l/brawl-rs.svg)](https://github.com/k1llm3sixy/Brawl-Api-rs/blob/main/LICENSE)

> **📚 Learning Project**: This is my first Rust project! I'm actively learning Rust. Feel free to share feedback and contribute! 🚀

## Features


- 📡 **Complete API coverage** - Support for:
  - Player profiles and statistics
  - Club information and members
  - Brawler data and abilities
  - Game modes and event rotations
  - Rankings by region
  - Battle logs and match history
- 🎯 **Easy to use** - Intuitive API with sensible defaults

## Installation


Add this to your `Cargo.toml`:

```toml
[dependencies]
brawl-rs = "0.1.0"
tokio = { version = "1.50.0", features = ["rt", "rt-multi-thread", "macros"] }
```

## Quick Start


```no_run
use brawl_rs::prelude::*;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a client with your API token
    let client = BrawlClient::new(std::env::var("BRAWL_TOKEN")?);
    
    // Fetch player information
    let player = Player::get(&client, "20YY0G9L0").await?;
    println!("Player: {}", player.name);
    println!("Trophies: {}", player.trophies);
    println!("Level: {}", player.exp_level);
    
    Ok(())
}
```

## Getting Your API Token


1. Go to [Brawl Stars Developer Portal]https://developer.brawlstars.com/
2. Sign in with your Supercell ID
3. Create a new application
4. Copy your API token

## Examples


### Fetch Player Information


```no_run
use brawl_rs::prelude::*;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = BrawlClient::new(std::env::var("BRAWL_TOKEN")?);
    
    let player = Player::get(&client, "20YY0G9L0").await?;
    
    println!("Name: {}", player.name);
    println!("Trophies: {}", player.trophies);
    println!("Highest: {}", player.highest_trophies);
    println!("Level: {}", player.exp_level);
    println!("Brawlers: {}", player.brawlers.len());
    
    Ok(())
}
```

### Fetch Club Information


```no_run
use brawl_rs::prelude::*;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = BrawlClient::new(std::env::var("BRAWL_TOKEN")?);
    
    let club = Club::get(&client, "82Y2QCCCQ").await?;
    
    println!("Club: {}", club.name);
    println!("Members: {}", club.members.len());
    println!("Trophies: {}", club.trophies);
    
    for member in &club.members {
        println!("- {} ({}): {}", member.name, member.role, member.trophies);
    }
    
    Ok(())
}
```

### Get All Brawlers


```no_run
use brawl_rs::prelude::*;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = BrawlClient::new(std::env::var("BRAWL_TOKEN")?);
    
    let brawlers = Brawlers::get(&client).await?;
    
    for brawler in &brawlers.items {
        println!(
            "{}: {} star powers, {} gadgets, {} gears",
            brawler.name,
            brawler.star_powers.len(),
            brawler.gadgets.len(),
            brawler.gears.len()
        );
    }
    
    Ok(())
}
```

### Get Current Event Rotation


```no_run
use brawl_rs::prelude::*;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = BrawlClient::new(std::env::var("BRAWL_TOKEN")?);
    
    let binding = Rotation::get(&client).await?;
    let rotation = binding.first().expect("No active events found");
    
    println!("Event: {}", rotation.event.mode);
    println!("Map: {}", rotation.event.map);
    println!("Active from {} to {}", rotation.start_time, rotation.end_time);
    
    Ok(())
}
```

### Get Rankings


```no_run
use brawl_rs::prelude::*;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = BrawlClient::new(std::env::var("BRAWL_TOKEN")?);
    
    // Global club rankings
    let clubs = RankingsClub::get(&client, "global").await?;
    for club in &clubs.items {
        println!("#{}: {} - {} trophies", club.rank, club.name, club.trophies);
    }
    
    // Regional player rankings (e.g., USA)
    let players = RankingsPlayer::get(&client, "US").await?;
    for player in &players.items {
        println!("#{}: {} - {} trophies", player.rank, player.name, player.trophies);
    }
    
    Ok(())
}
```

### Get Battle Log


```no_run
use brawl_rs::prelude::*;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = BrawlClient::new(std::env::var("BRAWL_TOKEN")?);
    
    let battle_log = BattleLog::get(&client, "20YY0G9L0").await?;
    
    println!("Found {} battles:", battle_log.items.len());
    
    for (i, battle) in battle_log.items.iter().enumerate().take(3) {
        println!("Battle #{}: {} - {} ({})", 
            i + 1, battle.battle.mode, battle.battle.kind, battle.battle_time);
        
        if let Some(result) = &battle.battle.result {
            println!("  Result: {}", result);
        }
        
        if let Some(star_player) = &battle.battle.star_player {
            println!("  Star Player: {} ({})", star_player.name, star_player.brawler.name);
        }
    }
    
    Ok(())
}
```

## Cargo features


- `player`
- `club`
- `events`
- `brawlers`
- `rankings`
- `battle_log`
- `all` - **All features**
- `default` - **player && battle_log**

## API Methods


### Player


- `Player::get(client, tag)` - Get player profile information

### Club


- `Club::get(client, tag)` - Get club information and members

### Brawlers


- `Brawlers::get(client)` - Get all brawlers with abilities
- `BrawlerInfo::get(client, brawler_id)` - Get detailed info for a specific brawler
- `BrawlerId` - Enum with all brawler IDs

### Events


- `GameModes::get(client)` - Get all available game modes
- `Rotation::get(client)` - Get current event rotation

### Rankings


- `RankingsClub::get(client, code)` - Get top clubs by region (use "global" for global rankings)
- `RankingsPlayer::get(client, code)` - Get top players by region (use "global" for global rankings)

### Battle Log


- `BattleLog::get(client, tag)` - Get player's battle history and match results

## About This Project


This is **my first Rust project**!

If you have suggestions or spot areas where the code could be improved, please open an issue or PR! Learning feedback is highly appreciated. 📚

## License


This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Contributing


Contributions are welcome! Please feel free to submit a Pull Request.

## Disclaimer


This is an unofficial wrapper for the Brawl Stars API. The library is not affiliated with or endorsed by Supercell.

## Support


If you have any questions or issues, please open an issue on GitHub.