Brawl API RS 🦀
A fast and async Rust wrapper for the Brawl Stars API.
📚 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:
[]
= "0.1.0"
= { = "1.50.0", = ["rt", "rt-multi-thread", "macros"] }
Quick Start
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
- Go to Brawl Stars Developer Portal
- Sign in with your Supercell ID
- Create a new application
- Copy your API token
Examples
Fetch Player Information
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
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
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
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
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
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
playerclubeventsbrawlersrankingsbattle_logall- All featuresdefault- 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 abilitiesBrawlerInfo::get(client, brawler_id)- Get detailed info for a specific brawlerBrawlerId- Enum with all brawler IDs
Events
GameModes::get(client)- Get all available game modesRotation::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 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.