[](https://choosealicense.com/licenses/mit/)
[](https://crates.io/crates/pinnacle)
[](https://docs.rs/pinnacle)
# pinnacle
Rust Wrapper for [Pinnacle Sports API][api]
> **Note**
> Not all of the API is currently wrapped, but it should be relatively easy to add missing
> endpoints. All you need to do is implement the corresponding
> [request](`traits::PinnacleApiRequest`) and probably a [response](`responses`).
> Don't hesitate to make a PR if you do.
Here are all the currently wrapped [`requests`].
## Usage
```rust,no_run
use pinnacle::prelude::*;
let client = PinnacleClient::new("pinnacle_user", "pinnacle_password");
let req = GetStraightOdds {
sport_id: 29,
..Default::default()
};
let odds = client.get(&req).await?;
```
You can also use a client that caches responses, which is helpful for development purposes:
```rust,no_run
use pinnacle::prelude::*;
use std::time::Duration;
let client = PinnacleCachingClient::new(
"pinnacle_user",
"pinnacle_password",
"cache-folder",
Duration::from_secs(60 * 5),
);
let balance = client.get(&GetClientBalance).await?;
// Now, if you repeat the request within 5 minutes, the cached version will be used
// instead of making a new request.
let cached_balance = client.get(&GetClientBalance).await?;
```
[api]: https://pinnacleapi.github.io/
## Contributing
We appreciate all kinds of contributions, thank you!
### Note on README
Most of the readme is automatically copied from the crate documentation by [cargo-sync-readme][].
This way the readme is always in sync with the docs and examples are tested.
So if you find a part of the readme you'd like to change between `<!-- cargo-sync-readme start -->`
and `<!-- cargo-sync-readme end -->` markers, don't edit `README.md` directly, but rather change
the documentation on top of `src/lib.rs` and then synchronize the readme with:
```bash
cargo sync-readme
```
(make sure the cargo command is installed):
```bash
cargo install cargo-sync-readme
```
If you have [rusty-hook] installed the changes will apply automatically on commit.
## License
This project is licensed under the [MIT license](LICENSE).
[cargo-sync-readme]: https://github.com/phaazon/cargo-sync-readme
[rusty-hook]: https://github.com/swellaby/rusty-hook