mirror of
https://codeberg.org/demostf/api-client.git
synced 2026-06-03 16:44:09 +02:00
more list filters
This commit is contained in:
parent
1f548385b8
commit
b78237e81c
2 changed files with 84 additions and 2 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "demostf-client"
|
name = "demostf-client"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
authors = ["Robin Appelman <robin@icewind.nl>"]
|
authors = ["Robin Appelman <robin@icewind.nl>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Api client for demos.tf"
|
description = "Api client for demos.tf"
|
||||||
|
|
|
||||||
84
src/lib.rs
84
src/lib.rs
|
|
@ -1,6 +1,6 @@
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use reqwest::{multipart, Client, IntoUrl, StatusCode, Url};
|
use reqwest::{multipart, Client, IntoUrl, StatusCode, Url};
|
||||||
use serde::{Deserialize, Deserializer, Serialize};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
@ -191,6 +191,18 @@ pub enum ListOrder {
|
||||||
Descending,
|
Descending,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Serialize)]
|
||||||
|
pub enum GameType {
|
||||||
|
#[serde(rename = "hl")]
|
||||||
|
HL,
|
||||||
|
#[serde(rename = "prolander")]
|
||||||
|
Prolander,
|
||||||
|
#[serde(rename = "6v6")]
|
||||||
|
Sixes,
|
||||||
|
#[serde(rename = "4v4")]
|
||||||
|
Fours,
|
||||||
|
}
|
||||||
|
|
||||||
impl Default for ListOrder {
|
impl Default for ListOrder {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
ListOrder::Descending
|
ListOrder::Descending
|
||||||
|
|
@ -216,6 +228,41 @@ impl From<ListOrder> for &str {
|
||||||
pub struct ListParams {
|
pub struct ListParams {
|
||||||
order: ListOrder,
|
order: ListOrder,
|
||||||
backend: Option<String>,
|
backend: Option<String>,
|
||||||
|
map: Option<String>,
|
||||||
|
players: PlayerList,
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
ty: Option<GameType>,
|
||||||
|
#[serde(serialize_with = "serialize_option_time")]
|
||||||
|
after: Option<DateTime<Utc>>,
|
||||||
|
#[serde(serialize_with = "serialize_option_time")]
|
||||||
|
before: Option<DateTime<Utc>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn serialize_option_time<S>(dt: &Option<DateTime<Utc>>, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
match dt {
|
||||||
|
Some(time) => chrono::serde::ts_seconds::serialize(time, serializer),
|
||||||
|
None => Option::<i64>::serialize(&None, serializer),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug)]
|
||||||
|
struct PlayerList(Vec<u64>);
|
||||||
|
|
||||||
|
impl Serialize for PlayerList {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
self.0
|
||||||
|
.iter()
|
||||||
|
.map(|steamid| format!("{}", steamid))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join(",")
|
||||||
|
.serialize(serializer)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ListParams {
|
impl ListParams {
|
||||||
|
|
@ -226,6 +273,41 @@ impl ListParams {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_map(self, map: impl ToString) -> Self {
|
||||||
|
ListParams {
|
||||||
|
map: Some(map.to_string()),
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_players(self, players: Vec<u64>) -> Self {
|
||||||
|
ListParams {
|
||||||
|
players: PlayerList(players),
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_type(self, ty: GameType) -> Self {
|
||||||
|
ListParams {
|
||||||
|
ty: Some(ty),
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_before(self, before: DateTime<Utc>) -> Self {
|
||||||
|
ListParams {
|
||||||
|
before: Some(before),
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_after(self, after: DateTime<Utc>) -> Self {
|
||||||
|
ListParams {
|
||||||
|
after: Some(after),
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn with_order(self, order: ListOrder) -> Self {
|
pub fn with_order(self, order: ListOrder) -> Self {
|
||||||
ListParams { order, ..self }
|
ListParams { order, ..self }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue