serde date format

This commit is contained in:
Robin Appelman 2023-11-18 19:23:26 +01:00
commit 8dc91f8bc3
8 changed files with 403 additions and 1689 deletions

1
Cargo.lock generated
View file

@ -1418,6 +1418,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
dependencies = [
"deranged",
"itoa",
"powerfmt",
"serde",
"time-core",

View file

@ -24,5 +24,5 @@ insta.opt-level = 3
similar.opt-level = 3
[features]
serde = ["dep:serde", "time/serde"]
serde = ["dep:serde", "time/serde", "time/formatting"]
default = ["serde"]

View file

@ -1,6 +1,41 @@
pub use steamid_ng::SteamID;
use time::{Date, OffsetDateTime};
#[cfg(feature = "serde")]
mod serde_date {
use serde::ser::Error as _;
use serde::{Serialize, Serializer};
use time::format_description::FormatItem;
use time::macros::format_description;
use time::Date;
const DATE_FORMAT: &[FormatItem<'static>] = format_description!("[year]-[month]-[day]");
pub fn serialize<S: Serializer>(date: &Date, serializer: S) -> Result<S::Ok, S::Error> {
date.format(DATE_FORMAT)
.map_err(S::Error::custom)?
.serialize(serializer)
}
pub mod opt {
use super::DATE_FORMAT;
use serde::ser::Error as _;
use serde::{Serialize, Serializer};
use time::Date;
pub fn serialize<S: Serializer>(
option: &Option<Date>,
serializer: S,
) -> Result<S::Ok, S::Error> {
option
.map(|odt| odt.format(DATE_FORMAT))
.transpose()
.map_err(S::Error::custom)?
.serialize(serializer)
}
}
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub struct Player {
@ -23,6 +58,7 @@ pub struct Honors {
pub struct TeamMemberShip {
pub team: TeamRef,
pub league: String,
#[cfg_attr(feature = "serde", serde(with = "serde_date"))]
pub since: Date,
}
@ -39,7 +75,9 @@ pub struct MembershipHistory {
pub format: String,
pub team: TeamRef,
pub division: String,
#[cfg_attr(feature = "serde", serde(with = "serde_date"))]
pub joined: Date,
#[cfg_attr(feature = "serde", serde(with = "serde_date::opt"))]
pub left: Option<Date>,
}
@ -66,6 +104,7 @@ pub struct NameChange {
pub from: String,
pub to_tag: String,
pub to: String,
#[cfg_attr(feature = "serde", serde(with = "serde_date"))]
pub date: Date,
}
@ -75,6 +114,7 @@ pub struct Membership {
pub name: String,
pub steam_id: SteamID,
pub role: String,
#[cfg_attr(feature = "serde", serde(with = "time::serde::iso8601"))]
pub since: OffsetDateTime,
}
@ -92,7 +132,9 @@ pub struct Record {
pub struct RosterHistory {
pub name: String,
pub steam_id: SteamID,
#[cfg_attr(feature = "serde", serde(with = "serde_date"))]
pub joined: Date,
#[cfg_attr(feature = "serde", serde(with = "serde_date::opt"))]
pub left: Option<Date>,
}

View file

@ -10,10 +10,7 @@ expression: parsed
"id": 7861
},
"division": "Euro Platinum",
"joined": [
2013,
221
],
"joined": "2013-08-09",
"left": null
},
{
@ -23,10 +20,7 @@ expression: parsed
"id": 6929
},
"division": "Europe",
"joined": [
2017,
52
],
"joined": "2017-02-21",
"left": null
},
{
@ -36,14 +30,8 @@ expression: parsed
"id": 17736
},
"division": "Euro Steel",
"joined": [
2015,
253
],
"left": [
2017,
22
]
"joined": "2015-09-10",
"left": "2017-01-22"
},
{
"format": "TF2 6vs6",
@ -52,14 +40,8 @@ expression: parsed
"id": 16277
},
"division": "Euro Steel",
"joined": [
2015,
157
],
"left": [
2015,
253
]
"joined": "2015-06-06",
"left": "2015-09-10"
},
{
"format": "TF2 6vs6",
@ -68,14 +50,8 @@ expression: parsed
"id": 17736
},
"division": "Euro Steel",
"joined": [
2015,
153
],
"left": [
2015,
157
]
"joined": "2015-06-02",
"left": "2015-06-06"
},
{
"format": "TF2 6vs6",
@ -84,14 +60,8 @@ expression: parsed
"id": 16277
},
"division": "Euro Steel",
"joined": [
2015,
32
],
"left": [
2015,
153
]
"joined": "2015-02-01",
"left": "2015-06-02"
},
{
"format": "TF2 6vs6",
@ -100,14 +70,8 @@ expression: parsed
"id": 8622
},
"division": "Euro Steel",
"joined": [
2013,
250
],
"left": [
2014,
357
]
"joined": "2013-09-07",
"left": "2014-12-23"
},
{
"format": "TF2 4vs4",
@ -116,13 +80,7 @@ expression: parsed
"id": 17790
},
"division": "Silver Euro",
"joined": [
2015,
153
],
"left": [
2017,
227
]
"joined": "2015-06-02",
"left": "2017-08-15"
}
]

View file

@ -214,10 +214,7 @@ expression: parsed
"id": 6929
},
"league": "TF2 6vs6 - Europe",
"since": [
2017,
52
]
"since": "2017-02-21"
},
{
"team": {
@ -225,10 +222,7 @@ expression: parsed
"id": 7861
},
"league": "TF2 Highlander - Euro Platinum",
"since": [
2013,
221
]
"since": "2013-08-09"
}
]
}

View file

@ -19,241 +19,91 @@ expression: parsed
"name": "GCKimo",
"steam_id": 76561197992327511,
"role": "Leader",
"since": [
2013,
127,
9,
31,
0,
0,
-5,
0,
0
]
"since": "+002013-05-07T09:31:00.000000000-05:00"
},
{
"name": "Gielewiel9",
"steam_id": 76561198061174419,
"role": "Member",
"since": [
2013,
254,
1,
21,
0,
0,
-5,
0,
0
]
"since": "+002013-09-11T01:21:00.000000000-05:00"
},
{
"name": "SUZY Sacrénom d'un",
"steam_id": 76561198004734774,
"role": "Member",
"since": [
2013,
276,
1,
45,
0,
0,
-5,
0,
0
]
"since": "+002013-10-03T01:45:00.000000000-05:00"
},
{
"name": "Vipe",
"steam_id": 76561198059011634,
"role": "Member",
"since": [
2014,
141,
3,
32,
0,
0,
-5,
0,
0
]
"since": "+002014-05-21T03:32:00.000000000-05:00"
},
{
"name": "spreijer tf2lt",
"steam_id": 76561198032234067,
"role": "Member",
"since": [
2014,
155,
1,
6,
0,
0,
-5,
0,
0
]
"since": "+002014-06-04T01:06:00.000000000-05:00"
},
{
"name": "Herpa",
"steam_id": 76561198183437643,
"role": "Member",
"since": [
2016,
173,
3,
5,
0,
0,
-5,
0,
0
]
"since": "+002016-06-21T03:05:00.000000000-05:00"
},
{
"name": "Icewind demostf",
"steam_id": 76561198024494988,
"role": "Member",
"since": [
2017,
52,
3,
52,
0,
0,
-5,
0,
0
]
"since": "+002017-02-21T03:52:00.000000000-05:00"
},
{
"name": "Vclox",
"steam_id": 76561198056783619,
"role": "Member",
"since": [
2018,
59,
2,
29,
0,
0,
-5,
0,
0
]
"since": "+002018-02-28T02:29:00.000000000-05:00"
},
{
"name": "Fish",
"steam_id": 76561198052362074,
"role": "Member",
"since": [
2018,
171,
2,
12,
0,
0,
-5,
0,
0
]
"since": "+002018-06-20T02:12:00.000000000-05:00"
},
{
"name": "Bobbert",
"steam_id": 76561198071877015,
"role": "Member",
"since": [
2019,
170,
1,
59,
0,
0,
-5,
0,
0
]
"since": "+002019-06-19T01:59:00.000000000-05:00"
},
{
"name": "Kaga",
"steam_id": 76561198040965137,
"role": "Member",
"since": [
2020,
42,
6,
35,
0,
0,
-5,
0,
0
]
"since": "+002020-02-11T06:35:00.000000000-05:00"
},
{
"name": "GMsU CreepsiliusM",
"steam_id": 76561198071903356,
"role": "Member",
"since": [
2022,
284,
4,
43,
0,
0,
-5,
0,
0
]
"since": "+002022-10-11T04:43:00.000000000-05:00"
},
{
"name": "DelT",
"steam_id": 76561198204007537,
"role": "Member",
"since": [
2023,
60,
3,
2,
0,
0,
-5,
0,
0
]
"since": "+002023-03-01T03:02:00.000000000-05:00"
},
{
"name": "Deity",
"steam_id": 76561198076020012,
"role": "Member",
"since": [
2023,
228,
4,
31,
0,
0,
-5,
0,
0
]
"since": "+002023-08-16T04:31:00.000000000-05:00"
},
{
"name": "Ikaros",
"steam_id": 76561198158482651,
"role": "Member",
"since": [
2023,
228,
4,
32,
0,
0,
-5,
0,
0
]
"since": "+002023-08-16T04:32:00.000000000-05:00"
}
],
"results": [
@ -444,140 +294,98 @@ expression: parsed
"from": "Xenon 2",
"to_tag": "Europe",
"to": "UGC 6s",
"date": [
2023,
60
]
"date": "2023-03-01"
},
{
"from_tag": "John 2",
"from": "Let's Claim the Default",
"to_tag": "by Kimo",
"to": "Xenon 2",
"date": [
2022,
278
]
"date": "2022-10-05"
},
{
"from_tag": "John 2",
"from": "https://youtu.be/iio-P3ubZtE",
"to_tag": "John 2",
"to": "Let's Claim the Default",
"date": [
2022,
170
]
"date": "2022-06-19"
},
{
"from_tag": "... I guess?",
"from": "Let's Claim the Default",
"to_tag": "John 2",
"to": "https://youtu.be/iio-P3ubZtE",
"date": [
2022,
137
]
"date": "2022-05-17"
},
{
"from_tag": "360",
"from": "Controller Gamers",
"to_tag": "... I guess?",
"to": "Let's Claim the Default",
"date": [
2021,
181
]
"date": "2021-06-30"
},
{
"from_tag": "bye",
"from": "Bye week",
"to_tag": "360",
"to": "Controller Gamers",
"date": [
2021,
55
]
"date": "2021-02-24"
},
{
"from_tag": "| meta.tf",
"from": "meta.tf",
"to_tag": "bye",
"to": "Bye week",
"date": [
2020,
281
]
"date": "2020-10-07"
},
{
"from_tag": "Giele!",
"from": "Giel and the 9wiels",
"to_tag": "| meta.tf",
"to": "meta.tf",
"date": [
2017,
151
]
"date": "2017-05-31"
},
{
"from_tag": "pFp",
"from": "Popping for points",
"to_tag": "Giele!",
"to": "Giel and the 9wiels",
"date": [
2016,
167
]
"date": "2016-06-15"
},
{
"from_tag": "HLL",
"from": "HL Lite",
"to_tag": "pFp",
"to": "Popping for points",
"date": [
2016,
20
]
"date": "2016-01-20"
},
{
"from_tag": "-AA-",
"from": "Anti-Anime",
"to_tag": "HLL",
"to": "HL Lite",
"date": [
2015,
280
]
"date": "2015-10-07"
},
{
"from_tag": "Frequent",
"from": "Frequently Missing",
"to_tag": "-AA-",
"to": "Anti-Anime",
"date": [
2015,
138
]
"date": "2015-05-18"
},
{
"from_tag": "pinky|",
"from": "Frequently Missing",
"to_tag": "Frequent",
"to": "Frequently Missing",
"date": [
2015,
17
]
"date": "2015-01-17"
},
{
"from_tag": "pinky|",
"from": "Pinky",
"to_tag": "pinky|",
"to": "Frequently Missing",
"date": [
2015,
17
]
"date": "2015-01-17"
}
]
}

View file

@ -18,337 +18,127 @@ expression: parsed
"name": "Icewind demostf",
"steam_id": 76561198024494988,
"role": "Leader",
"since": [
2013,
221,
3,
23,
0,
0,
-5,
0,
0
]
"since": "+002013-08-09T03:23:00.000000000-05:00"
},
{
"name": "Fish",
"steam_id": 76561198052362074,
"role": "Leader",
"since": [
2014,
120,
10,
37,
0,
0,
-5,
0,
0
]
"since": "+002014-04-30T10:37:00.000000000-05:00"
},
{
"name": "GCKimo",
"steam_id": 76561197992327511,
"role": "Leader",
"since": [
2016,
171,
11,
24,
0,
0,
-5,
0,
0
]
"since": "+002016-06-19T11:24:00.000000000-05:00"
},
{
"name": "NoSocks",
"steam_id": 76561198012110404,
"role": "Member",
"since": [
2013,
218,
5,
21,
0,
0,
-5,
0,
0
]
"since": "+002013-08-06T05:21:00.000000000-05:00"
},
{
"name": "Shoosh",
"steam_id": 76561198049593717,
"role": "Member",
"since": [
2014,
255,
9,
37,
0,
0,
-5,
0,
0
]
"since": "+002014-09-12T09:37:00.000000000-05:00"
},
{
"name": "Dirty Sneeds Done",
"steam_id": 76561198049312442,
"role": "Member",
"since": [
2015,
266,
12,
24,
0,
0,
-5,
0,
0
]
"since": "+002015-09-23T12:24:00.000000000-05:00"
},
{
"name": "Deity",
"steam_id": 76561198076020012,
"role": "Member",
"since": [
2015,
363,
2,
52,
0,
0,
-5,
0,
0
]
"since": "+002015-12-29T02:52:00.000000000-05:00"
},
{
"name": "jojo",
"steam_id": 76561197995029224,
"role": "Member",
"since": [
2016,
17,
10,
47,
0,
0,
-5,
0,
0
]
"since": "+002016-01-17T10:47:00.000000000-05:00"
},
{
"name": "bigdog",
"steam_id": 76561198076014163,
"role": "Member",
"since": [
2016,
146,
4,
8,
0,
0,
-5,
0,
0
]
"since": "+002016-05-25T04:08:00.000000000-05:00"
},
{
"name": "musTard",
"steam_id": 76561197990486664,
"role": "Member",
"since": [
2017,
17,
7,
43,
0,
0,
-5,
0,
0
]
"since": "+002017-01-17T07:43:00.000000000-05:00"
},
{
"name": "Kaga",
"steam_id": 76561198040965137,
"role": "Member",
"since": [
2018,
312,
6,
42,
0,
0,
-5,
0,
0
]
"since": "+002018-11-08T06:42:00.000000000-05:00"
},
{
"name": "STEEEEEEEEEEELAZ",
"steam_id": 76561198036824480,
"role": "Member",
"since": [
2019,
272,
8,
35,
0,
0,
-5,
0,
0
]
"since": "+002019-09-29T08:35:00.000000000-05:00"
},
{
"name": "Derakusa",
"steam_id": 76561198011495003,
"role": "Member",
"since": [
2020,
275,
4,
28,
0,
0,
-5,
0,
0
]
"since": "+002020-10-01T04:28:00.000000000-05:00"
},
{
"name": "Kireek",
"steam_id": 76561198052694464,
"role": "Member",
"since": [
2022,
27,
4,
17,
0,
0,
-5,
0,
0
]
"since": "+002022-01-27T04:17:00.000000000-05:00"
},
{
"name": "Royal Flush",
"steam_id": 76561198052084714,
"role": "Member",
"since": [
2022,
128,
6,
42,
0,
0,
-5,
0,
0
]
"since": "+002022-05-08T06:42:00.000000000-05:00"
},
{
"name": "BaaBo",
"steam_id": 76561198004331478,
"role": "Member",
"since": [
2023,
9,
10,
18,
0,
0,
-5,
0,
0
]
"since": "+002023-01-09T10:18:00.000000000-05:00"
},
{
"name": "drew",
"steam_id": 76561198012304706,
"role": "Member",
"since": [
2023,
43,
5,
54,
0,
0,
-5,
0,
0
]
"since": "+002023-02-12T05:54:00.000000000-05:00"
},
{
"name": "Raipe",
"steam_id": 76561198061082936,
"role": "Member",
"since": [
2023,
78,
5,
27,
0,
0,
-5,
0,
0
]
"since": "+002023-03-19T05:27:00.000000000-05:00"
},
{
"name": "Teroantero2007",
"steam_id": 76561197996902035,
"role": "Member",
"since": [
2023,
177,
2,
1,
0,
0,
-5,
0,
0
]
"since": "+002023-06-26T02:01:00.000000000-05:00"
},
{
"name": "taskmast33r",
"steam_id": 76561198218881647,
"role": "Member",
"since": [
2023,
203,
4,
46,
0,
0,
-5,
0,
0
]
"since": "+002023-07-22T04:46:00.000000000-05:00"
},
{
"name": "marko",
"steam_id": 76561198274165935,
"role": "Member",
"since": [
2023,
292,
1,
13,
0,
0,
-5,
0,
0
]
"since": "+002023-10-19T01:13:00.000000000-05:00"
}
],
"results": [

File diff suppressed because it is too large Load diff