use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Region {
Us,
Us2,
Uk,
Au,
Eu,
}
impl fmt::Display for Region {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Region::Us => write!(f, "us"),
Region::Us2 => write!(f, "us2"),
Region::Uk => write!(f, "uk"),
Region::Au => write!(f, "au"),
Region::Eu => write!(f, "eu"),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Market {
H2h,
Spreads,
Totals,
Outrights,
H2hLay,
#[serde(untagged)]
Custom(String),
}
impl fmt::Display for Market {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Market::H2h => write!(f, "h2h"),
Market::Spreads => write!(f, "spreads"),
Market::Totals => write!(f, "totals"),
Market::Outrights => write!(f, "outrights"),
Market::H2hLay => write!(f, "h2h_lay"),
Market::Custom(s) => write!(f, "{}", s),
}
}
}
impl From<&str> for Market {
fn from(s: &str) -> Self {
match s {
"h2h" => Market::H2h,
"spreads" => Market::Spreads,
"totals" => Market::Totals,
"outrights" => Market::Outrights,
"h2h_lay" => Market::H2hLay,
other => Market::Custom(other.to_string()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DateFormat {
#[default]
Iso,
Unix,
}
impl fmt::Display for DateFormat {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
DateFormat::Iso => write!(f, "iso"),
DateFormat::Unix => write!(f, "unix"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum OddsFormat {
#[default]
Decimal,
American,
}
impl fmt::Display for OddsFormat {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
OddsFormat::Decimal => write!(f, "decimal"),
OddsFormat::American => write!(f, "american"),
}
}
}
pub type SportKey = String;
pub type EventId = String;
pub(crate) fn format_csv<T: fmt::Display>(items: &[T]) -> String {
items
.iter()
.map(|i| i.to_string())
.collect::<Vec<_>>()
.join(",")
}