#![warn(unsafe_code)]
#![warn(clippy::all, clippy::panic, clippy::map_unwrap_or, clippy::unwrap_used)]
#![cfg_attr(test, allow(clippy::unwrap_used))]
mod elo;
mod rating;
pub use crate::elo::EloStrategy;
pub use crate::rating::Rating;
#[derive(Debug, Copy, Clone)]
pub enum GameResult {
Win,
Loss,
Draw,
}
pub trait CalculateRating {
fn calculate(&self, player: Rating, opponent: Rating, result: GameResult) -> (Rating, Rating);
fn calculate_multiple(
&self,
player: Rating,
opponent: Rating,
results: impl IntoIterator<Item = GameResult>,
) -> (Rating, Rating) {
results
.into_iter()
.fold((player, opponent), |(first, second), result| {
self.calculate(first, second, result)
})
}
}