r6tracker/types/
sessions_data.rs

1use crate::types::stat::Stat;
2use std::collections::HashMap;
3
4#[derive(Debug, serde::Deserialize, serde::Serialize)]
5pub struct SessionsData {
6    pub items: Vec<Session>,
7
8    #[serde(flatten)]
9    pub unknown: HashMap<String, serde_json::Value>,
10}
11
12#[derive(Debug, serde::Deserialize, serde::Serialize)]
13pub struct Session {
14    #[serde(rename = "startedAt")]
15    pub started_at: String,
16
17    #[serde(rename = "endedAt")]
18    pub ended_at: Option<String>,
19
20    pub duration: f64,
21
22    #[serde(rename = "isActive")]
23    pub is_active: bool,
24
25    pub matches: Vec<Match>,
26    pub stats: Vec<Stat>,
27
28    #[serde(flatten)]
29    pub unknown: HashMap<String, serde_json::Value>,
30}
31
32#[derive(Debug, serde::Deserialize, serde::Serialize)]
33pub struct Match {
34    pub id: String,
35
36    #[serde(rename = "type")]
37    pub kind: String,
38
39    pub metadata: serde_json::Value,
40    pub stats: Vec<Stat>,
41
42    #[serde(flatten)]
43    pub unknown: HashMap<String, serde_json::Value>,
44}
45
46#[cfg(test)]
47mod test {
48    use super::*;
49    use crate::types::ApiResponse;
50
51    const SAMPLE_1: &str = include_str!("../../test_data/sessions_data.json");
52
53    #[test]
54    fn parse_sample_1() {
55        let data = serde_json::from_str::<ApiResponse<SessionsData>>(SAMPLE_1)
56            .unwrap()
57            .take_valid()
58            .unwrap();
59
60        dbg!(&data);
61    }
62}