r6tracker/types/
sessions_data.rs1use 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}