#![warn(missing_docs)]
use serde::{Deserialize, Serialize};
pub mod deals;
pub mod games;
pub mod groups;
pub mod items;
pub mod market_activity;
pub mod players;
pub mod trade_ads;
pub use reqwest;
const USER_AGENT: &str =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0";
#[derive(thiserror::Error, Debug, Default)]
pub enum RoliError {
#[error("Request Returned Unsuccessful")]
RequestReturnedUnsuccessful,
#[default]
#[error("Too Many Requests")]
TooManyRequests,
#[error("Internal Server Error")]
InternalServerError,
#[error("Malformed Response")]
MalformedResponse,
#[error("Roli Verification Contains Invalid Characters")]
RoliVerificationContainsInvalidCharacters,
#[error("Roli Verification Invalid Or Expired")]
RoliVerificationInvalidOrExpired,
#[error("Roli Verification Not Set")]
RoliVerificationNotSet,
#[error("Cooldown Not Expired")]
CooldownNotExpired,
#[error("Unidentified Status Code {0}")]
UnidentifiedStatusCode(u16),
#[error("RequestError {0}")]
ReqwestError(reqwest::Error),
}
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(untagged)]
pub(crate) enum Code {
Integer(i64),
String(String),
}
#[derive(Clone, Debug, Default)]
pub struct Client {
roli_verification: Option<String>,
reqwest_client: reqwest::Client,
}
#[derive(Clone, Debug, Default)]
pub struct ClientBuilder {
roli_verification: Option<String>,
reqwest_client: Option<reqwest::Client>,
}
impl Code {
fn to_i64(&self) -> Result<i64, RoliError> {
match self {
Self::Integer(x) => Ok(*x),
Self::String(x) => x.parse().map_err(|_| RoliError::MalformedResponse),
}
}
}
impl std::fmt::Display for Code {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Integer(x) => write!(f, "{}", x),
Self::String(x) => write!(f, "{}", x),
}
}
}
impl Client {
#[deprecated(since = "0.6.7", note = "Use ClientBuilder::new().build() instead.")]
pub fn new() -> Self {
Self::default()
}
#[deprecated(
since = "0.6.7",
note = "Use ClientBuilder::new().set_roli_verification(roli_verification).build() instead."
)]
pub fn with_roli_verification(roli_verification: String) -> Self {
Self {
roli_verification: Some(roli_verification),
..Default::default()
}
}
#[deprecated(
since = "0.6.7",
note = "Use ClientBuilder::new().set_roli_verification(roli_verification).build() instead."
)]
pub fn set_roli_verification(&mut self, roli_verification: String) {
self.roli_verification = Some(roli_verification);
}
pub fn contains_roli_verification(&self) -> bool {
self.roli_verification.is_some()
}
}
impl ClientBuilder {
pub fn new() -> Self {
Self {
roli_verification: None,
reqwest_client: None,
}
}
pub fn build(self) -> Client {
let reqwest_client = self.reqwest_client.unwrap_or_default();
Client {
roli_verification: self.roli_verification,
reqwest_client,
}
}
pub fn set_roli_verification(mut self, roli_verification: String) -> Self {
self.roli_verification = Some(roli_verification);
self
}
pub fn set_reqwest_client(mut self, reqwest_client: reqwest::Client) -> Self {
self.reqwest_client = Some(reqwest_client);
self
}
}