titanium_model/
soundboard.rs1use crate::Snowflake;
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Deserialize, Serialize)]
10pub struct SoundboardSound<'a> {
11 pub name: String,
13
14 pub sound_id: Snowflake,
16
17 pub volume: f64,
19
20 #[serde(default)]
22 pub emoji_id: Option<Snowflake>,
23
24 #[serde(default)]
26 pub emoji_name: Option<String>,
27
28 #[serde(default)]
30 pub guild_id: Option<Snowflake>,
31
32 #[serde(default)]
34 pub available: bool,
35
36 #[serde(default)]
38 pub user: Option<super::User<'a>>,
39}
40
41#[derive(Debug, Clone, Deserialize, Serialize)]
43pub struct SoundboardSoundDeleteEvent {
44 pub sound_id: Snowflake,
46
47 pub guild_id: Snowflake,
49}
50
51#[derive(Debug, Clone, Deserialize, Serialize)]
53pub struct SoundboardSoundsUpdateEvent<'a> {
54 pub soundboard_sounds: Vec<SoundboardSound<'a>>,
56
57 #[serde(default)]
59 pub guild_id: Option<Snowflake>,
60}
61
62#[derive(Debug, Clone, Deserialize, Serialize)]
64pub struct GuildSoundboardSoundsUpdateEvent<'a> {
65 pub soundboard_sounds: Vec<SoundboardSound<'a>>,
67
68 pub guild_id: Snowflake,
70}
71
72#[cfg(test)]
73mod tests {
74 use super::*;
75
76 #[test]
77 fn test_soundboard_sound() {
78 let json = r#"{
79 "name": "airhorn",
80 "sound_id": "123456789",
81 "volume": 0.5,
82 "available": true
83 }"#;
84
85 let sound: SoundboardSound = crate::json::from_str(json).unwrap();
86 assert_eq!(sound.name, "airhorn");
87 assert_eq!(sound.volume, 0.5);
88 }
89}