use std::collections::HashMap;
use serde::Deserialize;
use crate::types::{Channel, Snowflake, User};
#[derive(Debug, Clone, Deserialize)]
pub struct Lobby {
pub id: Snowflake,
pub application_id: Snowflake,
pub metadata: Option<HashMap<String, String>>,
pub members: Vec<LobbyMember>,
pub linked_channel: Option<Channel>,
#[serde(default)]
pub flags: u32,
pub override_event_webhooks_url: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct LobbyMember {
pub id: Snowflake,
pub metadata: Option<HashMap<String, String>>,
#[serde(default)]
pub flags: u32,
pub additional_name: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct LobbyGuildInvite {
pub code: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct LobbyMessage {
pub id: Snowflake,
#[serde(rename = "type")]
pub t: u8,
pub content: String,
pub lobby_id: Snowflake,
pub channel_id: Snowflake,
pub author: User,
pub metadata: Option<HashMap<String, String>>,
#[serde(default)]
pub moderation_metadata: Option<HashMap<String, String>>,
pub flags: Option<u64>,
pub application_id: Option<Snowflake>,
pub edited_timestamp: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct LobbyMessageDelete {
pub id: Snowflake,
pub lobby_id: Snowflake,
}
#[cfg(test)]
mod tests {
use serde_json::json;
use super::*;
#[test]
fn parses_lobbies() {
let lobby: Lobby = serde_json::from_value(json!({
"id": "5", "application_id": "1", "metadata": { "map": "dust" }, "flags": 1,
"members": [{ "id": "6", "metadata": null, "flags": 1 }],
}))
.unwrap();
assert_eq!(lobby.metadata.unwrap()["map"], "dust");
assert_eq!(lobby.members[0].flags, 1);
assert!(lobby.linked_channel.is_none());
}
}