twilight_model/guild/
integration_type.rs1#![allow(deprecated)]
2use std::borrow::Cow;
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
12#[non_exhaustive]
13#[serde(from = "String", into = "Cow<'static, str>")]
14pub enum GuildIntegrationType {
15 Discord,
17 Twitch,
19 YouTube,
21 GuildSubscription,
23 Unknown(String),
25}
26
27impl From<GuildIntegrationType> for Cow<'static, str> {
28 fn from(value: GuildIntegrationType) -> Self {
29 match value {
30 GuildIntegrationType::Discord => "discord".into(),
31 GuildIntegrationType::Twitch => "twitch".into(),
32 GuildIntegrationType::YouTube => "youtube".into(),
33 GuildIntegrationType::GuildSubscription => "guild_subscription".into(),
34 GuildIntegrationType::Unknown(unknown) => unknown.into(),
35 }
36 }
37}
38
39impl From<String> for GuildIntegrationType {
40 fn from(value: String) -> Self {
41 match value.as_str() {
42 "discord" => Self::Discord,
43 "twitch" => Self::Twitch,
44 "youtube" => Self::YouTube,
45 "guild_subscription" => Self::GuildSubscription,
46 _ => Self::Unknown(value),
47 }
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::GuildIntegrationType;
54 use serde_test::Token;
55
56 #[test]
57 fn variants() {
58 const MAP: &[(GuildIntegrationType, &str)] = &[
59 (GuildIntegrationType::Discord, "discord"),
60 (GuildIntegrationType::Twitch, "twitch"),
61 (GuildIntegrationType::YouTube, "youtube"),
62 (
63 GuildIntegrationType::GuildSubscription,
64 "guild_subscription",
65 ),
66 ];
67
68 for (integration_type, value) in MAP {
69 serde_test::assert_tokens(integration_type, &[Token::Str(value)]);
70 }
71 }
72}