use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum SocialMediaType {
Blog,
Digg,
Facebook,
FacebookMessenger,
GooglePlus,
IMessage,
Instagram,
LinkedIn,
Pinterest,
Reddit,
Slack,
Snapchat,
StumbleUpon,
Tumblr,
Twitter,
Website,
YouTube,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for SocialMediaType {
fn from_str(s: &str) -> SocialMediaType {
match s {
"Blog" => SocialMediaType::Blog,
"Digg" => SocialMediaType::Digg,
"Facebook" => SocialMediaType::Facebook,
"Facebook Messenger" => SocialMediaType::FacebookMessenger,
"GooglePlus" => SocialMediaType::GooglePlus,
"iMessage" => SocialMediaType::IMessage,
"Instagram" => SocialMediaType::Instagram,
"LinkedIn" => SocialMediaType::LinkedIn,
"Pinterest" => SocialMediaType::Pinterest,
"Reddit" => SocialMediaType::Reddit,
"Slack" => SocialMediaType::Slack,
"Snapchat" => SocialMediaType::Snapchat,
"StumbleUpon" => SocialMediaType::StumbleUpon,
"Tumblr" => SocialMediaType::Tumblr,
"Twitter" => SocialMediaType::Twitter,
"Website" => SocialMediaType::Website,
"YouTube" => SocialMediaType::YouTube,
_ => SocialMediaType::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> SocialMediaType {
match s.as_ref() {
"Blog" => SocialMediaType::Blog,
"Digg" => SocialMediaType::Digg,
"Facebook" => SocialMediaType::Facebook,
"Facebook Messenger" => SocialMediaType::FacebookMessenger,
"GooglePlus" => SocialMediaType::GooglePlus,
"iMessage" => SocialMediaType::IMessage,
"Instagram" => SocialMediaType::Instagram,
"LinkedIn" => SocialMediaType::LinkedIn,
"Pinterest" => SocialMediaType::Pinterest,
"Reddit" => SocialMediaType::Reddit,
"Slack" => SocialMediaType::Slack,
"Snapchat" => SocialMediaType::Snapchat,
"StumbleUpon" => SocialMediaType::StumbleUpon,
"Tumblr" => SocialMediaType::Tumblr,
"Twitter" => SocialMediaType::Twitter,
"Website" => SocialMediaType::Website,
"YouTube" => SocialMediaType::YouTube,
_ => SocialMediaType::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
SocialMediaType::Blog => "Blog",
SocialMediaType::Digg => "Digg",
SocialMediaType::Facebook => "Facebook",
SocialMediaType::FacebookMessenger => "Facebook Messenger",
SocialMediaType::GooglePlus => "GooglePlus",
SocialMediaType::IMessage => "iMessage",
SocialMediaType::Instagram => "Instagram",
SocialMediaType::LinkedIn => "LinkedIn",
SocialMediaType::Pinterest => "Pinterest",
SocialMediaType::Reddit => "Reddit",
SocialMediaType::Slack => "Slack",
SocialMediaType::Snapchat => "Snapchat",
SocialMediaType::StumbleUpon => "StumbleUpon",
SocialMediaType::Tumblr => "Tumblr",
SocialMediaType::Twitter => "Twitter",
SocialMediaType::Website => "Website",
SocialMediaType::YouTube => "YouTube",
SocialMediaType::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
SocialMediaType::Blog => "Blog".into(),
SocialMediaType::Digg => "Digg".into(),
SocialMediaType::Facebook => "Facebook".into(),
SocialMediaType::FacebookMessenger => "Facebook Messenger".into(),
SocialMediaType::GooglePlus => "GooglePlus".into(),
SocialMediaType::IMessage => "iMessage".into(),
SocialMediaType::Instagram => "Instagram".into(),
SocialMediaType::LinkedIn => "LinkedIn".into(),
SocialMediaType::Pinterest => "Pinterest".into(),
SocialMediaType::Reddit => "Reddit".into(),
SocialMediaType::Slack => "Slack".into(),
SocialMediaType::Snapchat => "Snapchat".into(),
SocialMediaType::StumbleUpon => "StumbleUpon".into(),
SocialMediaType::Tumblr => "Tumblr".into(),
SocialMediaType::Twitter => "Twitter".into(),
SocialMediaType::Website => "Website".into(),
SocialMediaType::YouTube => "YouTube".into(),
SocialMediaType::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
SocialMediaType::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for SocialMediaType {
fn from(s: String) -> SocialMediaType {
match s.as_ref() {
"Blog" => SocialMediaType::Blog,
"Digg" => SocialMediaType::Digg,
"Facebook" => SocialMediaType::Facebook,
"Facebook Messenger" => SocialMediaType::FacebookMessenger,
"GooglePlus" => SocialMediaType::GooglePlus,
"iMessage" => SocialMediaType::IMessage,
"Instagram" => SocialMediaType::Instagram,
"LinkedIn" => SocialMediaType::LinkedIn,
"Pinterest" => SocialMediaType::Pinterest,
"Reddit" => SocialMediaType::Reddit,
"Slack" => SocialMediaType::Slack,
"Snapchat" => SocialMediaType::Snapchat,
"StumbleUpon" => SocialMediaType::StumbleUpon,
"Tumblr" => SocialMediaType::Tumblr,
"Twitter" => SocialMediaType::Twitter,
"Website" => SocialMediaType::Website,
"YouTube" => SocialMediaType::YouTube,
_ => SocialMediaType::OpenEnumeration(s),
}
}
}
impl From<&str> for SocialMediaType {
fn from(s: &str) -> SocialMediaType {
match s {
"Blog" => SocialMediaType::Blog,
"Digg" => SocialMediaType::Digg,
"Facebook" => SocialMediaType::Facebook,
"Facebook Messenger" => SocialMediaType::FacebookMessenger,
"GooglePlus" => SocialMediaType::GooglePlus,
"iMessage" => SocialMediaType::IMessage,
"Instagram" => SocialMediaType::Instagram,
"LinkedIn" => SocialMediaType::LinkedIn,
"Pinterest" => SocialMediaType::Pinterest,
"Reddit" => SocialMediaType::Reddit,
"Slack" => SocialMediaType::Slack,
"Snapchat" => SocialMediaType::Snapchat,
"StumbleUpon" => SocialMediaType::StumbleUpon,
"Tumblr" => SocialMediaType::Tumblr,
"Twitter" => SocialMediaType::Twitter,
"Website" => SocialMediaType::Website,
"YouTube" => SocialMediaType::YouTube,
_ => SocialMediaType::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a SocialMediaType> for &'a str {
fn from(s: &'a SocialMediaType) -> &'a str {
match s {
SocialMediaType::Blog => "Blog",
SocialMediaType::Digg => "Digg",
SocialMediaType::Facebook => "Facebook",
SocialMediaType::FacebookMessenger => "Facebook Messenger",
SocialMediaType::GooglePlus => "GooglePlus",
SocialMediaType::IMessage => "iMessage",
SocialMediaType::Instagram => "Instagram",
SocialMediaType::LinkedIn => "LinkedIn",
SocialMediaType::Pinterest => "Pinterest",
SocialMediaType::Reddit => "Reddit",
SocialMediaType::Slack => "Slack",
SocialMediaType::Snapchat => "Snapchat",
SocialMediaType::StumbleUpon => "StumbleUpon",
SocialMediaType::Tumblr => "Tumblr",
SocialMediaType::Twitter => "Twitter",
SocialMediaType::Website => "Website",
SocialMediaType::YouTube => "YouTube",
SocialMediaType::OpenEnumeration(s) => s,
}
}
}
impl Serialize for SocialMediaType {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.into())
}
}
impl<'de> Deserialize<'de> for SocialMediaType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}