A Clash of Clans API wrapper written in rust!
Add the version from here in your Cargo.toml
toml
[dependencies]
coc-rs = "x.x.x"
Alternatively with cargo add
shell
$ cargo add coc-rs
```rust
async fn main() { let credentials = CredentialsBuilder::new() .add_credential(env::var("username").unwrap(), env::var("password").unwrap()) .build(); let client = Client::new(credentials).await;
let player = client.get_player("#2PP".to_string()).await.unwrap();
println!("Player: {:?}", player);
} ```
```rust
async fn main() { let credentials = CredentialsBuilder::new() .add_credential(env::var("username").unwrap(), env::var("password").unwrap()) .build(); let client = Client::new(credentials).await;
let clan = match client.get_clan("#IncorrectTag".to_string()).await {
Ok(c) => {
println!("Clan: {:?}", clan);
}
Err(err) => {
match err {
APIError::BadRequest(err) => {} // caused when a BadRequest is made, such as invalid url parameters
APIError::RequestFailed(err) => {} // Request never made it to the API
APIError::BadResponse(msg, code) => {
match code {
StatusCode::NOT_FOUND => {
println!("Player Not found")
},
_ => {
//There are other status code that the api can return in case of error.
}
}
} // this is common error you will face and will be expected to handle it almost everytime
APIError::InvalidParameters(err) => {}
}
}
};
} ```
First we need to make a Event handler struct, that will implement the trait EventHandler
```rust struct Handler;
impl events::EventHandler for S {
/// Next we bring the player method in scope, and define the behaviour
async fn player(&self, oldplayer: Option
/// to handle errors in the events task we need a separate error handler
async fn handle_error(
&self,
_error: APIError,
_tag: Option<String>,
_event_type: EventType,
) {
println!("Houston we have a problem!")
}
} ```
Next in the main function, we will create the main function, login and add the Player and clan tags we want to keep pulling the data from API.
```rust
async fn main() { //... /// see above example on how to create a client
let task = tokio::spawn(async move {
/// staring the API events in a separate thread
let mut x = events::EventsListenerBuilder::new(client);
x.add_player("#2PP".to_string()).await;
x.add_players(vec!["#CVJLQOLR".to_string()])
.await
.build(Handler) /// Building the eventListener struct
.init() /// starting the continuous polling of the clan/player/current_war endpoints
.await;
});
task.await.unwrap();
} ```
To Enable cos
feature, add this to your Cargo.toml
toml
[dependencies]
coc-rs = { version = "x.x.x", features = ["cos"] }
cargo add
shell
$ cargo add coc-rs --features cos
Note: Each endpoint has a different cache refresh time. Each event will be fired at the exact time of new cache data in the API.
400 -> BadRequestException
403 -> AuthException
404 -> NotFoundException
429 -> RateLimitException
503 -> MaintenanceException
src/test.rs
& src/test_cos.rs
contains examples for every endpoint in more detail.
Contributing is fantastic and much welcomed! If you have an issue, feel free to open an issue and start working on it.
This content is not affiliated with, endorsed, sponsored, or specifically approved by Supercell and Supercell is not responsible for it. For more information see Supercell'S Fan Content Policy.