twapi_v2/responses/
spaces.rs1use crate::responses::topics::Topics;
2use chrono::prelude::*;
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)]
6pub struct Spaces {
7 pub id: String,
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub host_ids: Option<Vec<String>>,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub created_at: Option<DateTime<Utc>>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub creator_id: Option<String>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub ended_at: Option<DateTime<Utc>>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub lang: Option<String>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub is_ticketed: Option<bool>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub invited_user_ids: Option<Vec<String>>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub participant_count: Option<i64>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub scheduled_start: Option<DateTime<Utc>>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub speaker_ids: Option<Vec<String>>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub started_at: Option<DateTime<Utc>>,
30 pub state: State,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub subscriber_count: Option<i64>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub topic_ids: Option<Vec<String>>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub topics: Option<Vec<Topics>>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub title: Option<String>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub updated_at: Option<DateTime<Utc>>,
41 #[serde(flatten)]
42 pub extra: std::collections::HashMap<String, serde_json::Value>,
43}
44
45impl Spaces {
46 pub fn is_empty_extra(&self) -> bool {
47 let res = self.extra.is_empty()
48 && self
49 .topics
50 .as_ref()
51 .map(|it| it.iter().all(|item| item.is_empty_extra()))
52 .unwrap_or(true);
53 if !res {
54 println!("Spaces {:?}", self.extra);
55 }
56 res
57 }
58}
59
60#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
61#[derive(Default)]
62pub enum State {
63 #[serde(rename = "live")]
64 #[default]
65 Live,
66 #[serde(rename = "scheduled")]
67 Scheduled,
68}
69
70impl std::fmt::Display for State {
71 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
72 match self {
73 Self::Live => write!(f, "live"),
74 Self::Scheduled => write!(f, "scheduled"),
75 }
76 }
77}
78