forked from mirror/Riven
1
0
Fork 0
Riven/README.md

143 lines
5.7 KiB
Markdown
Raw Normal View History

2019-11-05 07:03:59 +00:00
<h1 align="center">
Riven<br>
2019-12-07 06:36:48 +00:00
</h1>
<p align="center">
2019-11-05 07:29:20 +00:00
<a href="https://github.com/MingweiSamuel/Riven/"><img src="https://cdn.communitydragon.org/latest/champion/Riven/square" width="20" height="20" alt="Riven Github"></a>
2019-11-05 07:03:59 +00:00
<a href="https://crates.io/crates/riven"><img src="https://img.shields.io/crates/v/riven?style=flat-square&logo=rust" alt="Crates.io"></a>
<a href="https://docs.rs/riven/"><img src="https://img.shields.io/badge/docs.rs-Riven-blue?style=flat-square&logo=read-the-docs&logoColor=white" alt="Docs.rs"></a>
<a href="https://travis-ci.com/MingweiSamuel/Riven"><img src="https://img.shields.io/travis/com/mingweisamuel/riven?style=flat-square" alt="Travis CI"></a>
<a href="https://github.com/rust-secure-code/safety-dance/"><img src="https://img.shields.io/badge/unsafe-forbidden-green.svg?style=flat-square" alt="unsafe forbidden"></a>
2019-12-07 06:36:48 +00:00
</p>
2019-11-03 20:04:25 +00:00
Rust Library for the [Riot Games API](https://developer.riotgames.com/).
Riven's goals are _speed_, _reliability_, and _maintainability_. Riven handles rate limits and large requests with ease.
2019-11-03 20:04:25 +00:00
Data structs and endpoints are automatically generated from the
[Riot API Reference](https://developer.riotgames.com/api-methods/) ([Swagger](http://www.mingweisamuel.com/riotapi-schema/tool/)).
## Design
2019-11-03 20:04:25 +00:00
* Fast, asynchronous, thread-safe.
* Automatically retries failed requests.
* TFT API Support.
## Usage
```rust
use riven::RiotApi;
use riven::consts::Region;
// Enter tokio async runtime.
let mut rt = tokio::runtime::Runtime::new().unwrap();
2019-11-03 22:36:30 +00:00
rt.block_on(async {
2019-11-08 00:38:53 +00:00
// Create RiotApi instance from key string.
2019-11-03 22:36:30 +00:00
let api_key = "RGAPI-01234567-89ab-cdef-0123-456789abcdef";
2019-11-08 00:38:53 +00:00
# /* (doc testing) */ let api_key = std::env!("RGAPI_KEY");
2019-11-03 22:36:30 +00:00
let riot_api = RiotApi::with_key(api_key);
2019-11-03 20:04:25 +00:00
// Get summoner data.
let summoner = riot_api.summoner_v4()
.get_by_summoner_name(Region::NA, "잘 못").await
2019-11-03 20:04:25 +00:00
.expect("Get summoner failed.")
.expect("There is no summoner with that name.");
2019-11-03 20:04:25 +00:00
// Print summoner name.
println!("{} Champion Masteries:", summoner.name);
// Get champion mastery data.
let masteries = riot_api.champion_mastery_v4()
.get_all_champion_masteries(Region::NA, &summoner.id).await
.expect("Get champion masteries failed.");
2019-11-03 20:04:25 +00:00
// Print champioon masteries.
2021-04-09 20:42:59 +00:00
for (i, mastery) in masteries.iter().take(10).enumerate() {
2019-11-03 20:04:25 +00:00
println!("{: >2}) {: <9} {: >7} ({})", i + 1,
mastery.champion_id.to_string(),
mastery.champion_points, mastery.champion_level);
}
2019-11-03 22:36:30 +00:00
});
2019-11-03 20:04:25 +00:00
```
Output:
```text
잘 못 Champion Masteries:
1) Riven 1219895 (7)
2) Fiora 229714 (5)
3) Katarina 175985 (5)
4) Lee Sin 150546 (7)
5) Jax 100509 (5)
6) Gnar 76373 (6)
7) Kai'Sa 64271 (5)
8) Caitlyn 46479 (5)
9) Irelia 46465 (5)
10) Vladimir 37176 (5)
```
2019-11-05 06:41:47 +00:00
### Nightly vs Stable
Enable the `nightly` feature to use nightly-only functionality. Mainly enables
[nightly optimizations in the `parking_lot` crate](https://github.com/Amanieu/parking_lot#nightly-vs-stable).
Also required for running async integration tests.
### Docs
2019-11-05 06:41:47 +00:00
[On docs.rs](https://docs.rs/riven/).
### Error Handling
2019-11-05 06:41:47 +00:00
2020-02-02 01:31:53 +00:00
Riven returns either `Result<T>` or `Result<Option<T>>` within futures.
2019-11-05 06:41:47 +00:00
2020-02-02 01:31:53 +00:00
If the `Result` is errored, this indicates that the API request failed to
complete successfully, which may be due to bad user input, Riot server errors,
incorrect API key, etc.
2020-02-02 01:31:53 +00:00
If the `Option` is `None`, this indicates that the request completed
successfully but no data was returned. This happens in several situations, such
as getting a summoner (by name) or match (by id) that doesn't exist, or getting
spectator data for a summoner who is not in-game.
Specifically, the API returned a 404 HTTP status code in this situation.
The error type used by Riven is `riven::RiotApiError`. It provides some basic
diagnostic information, such as the source Reqwest error, the number of retries
attempted, and the Reqwest `Response` object.
2020-02-02 01:31:53 +00:00
You can configure the number of time Riven retries using
`RiotApiConfig::set_retries(...)` and the `RiotApi::with_config(config)`
constructor. By default, Riven retries up to 3 times (4 requests total).
Some errors, such as 400 client errors, are not retried as they would
inevitably fail again.
2020-02-02 01:31:53 +00:00
### Semantic Versioning
This package follows semantic versioning to an extent. However, the Riot API
itself changes often and does not follow semantic versioning, which makes
things difficult. Out-of-date versions will slowly partially cease to work due
to this.
When the API changes, this may result in breaking changes in the `models`
module, `endpoints` module, and some of the `consts` module. "Handle accessor"
methods may be removed from `RiotApi` if the corresponding endpoint is removed
from the Riot API. These breaking changes will increment the **MINOR** version,
not the major version.
Parts of Riven that do not depend on Riot API changes do follow semantic
versioning.
### Additional Help
2019-11-05 06:41:47 +00:00
Feel free to [make an issue](https://github.com/MingweiSamuel/Riven/issues/new)
if you are have any questions or trouble with Riven.
## Development
NodeJS is used to generate code for Riven. The
[`srcgen/`](https://github.com/MingweiSamuel/Riven/tree/master/srcgen)
folder contains the code and [doT.js](https://olado.github.io/doT/index.html)
templates. `index.js` lists the JSON files downloaded and used to generate the
code.
To set up the srcgen, you will first need to install NodeJS. Then enter the
srcgen folder and run `npm ci` (or `npm install`) to install dependencies.
To run the srcgen use `node srcgen` from the main folder.