use std::str::FromStr;
use tosho_macros::{DeserializeEnum, EnumName, SerializeEnum, enum_error};
#[derive(Debug, Clone, Copy, PartialEq, SerializeEnum, DeserializeEnum, EnumName)]
pub enum SaleStatus {
ForSale,
PostSale,
}
enum_error!(SaleStatusFromStrError);
impl FromStr for SaleStatus {
type Err = SaleStatusFromStrError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_ascii_lowercase().as_str() {
"for-sale" => Ok(SaleStatus::ForSale),
"post-sale" => Ok(SaleStatus::PostSale),
_ => Err(SaleStatusFromStrError {
original: s.to_string(),
}),
}
}
}
impl std::fmt::Display for SaleStatus {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
SaleStatus::ForSale => write!(f, "for-sale"),
SaleStatus::PostSale => write!(f, "post-sale"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, SerializeEnum, DeserializeEnum, EnumName)]
pub enum DownloadType {
Unavailable,
DRMFree,
Watermarked,
InvisibleWatermarked,
}
enum_error!(DownloadTypeFromStrError);
impl FromStr for DownloadType {
type Err = DownloadTypeFromStrError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_ascii_lowercase().as_str() {
"unavailable" => Ok(DownloadType::Unavailable),
"drm-free" => Ok(DownloadType::DRMFree),
"visible-watermark" => Ok(DownloadType::Watermarked),
"invisible-watermark" => Ok(DownloadType::InvisibleWatermarked),
_ => Err(DownloadTypeFromStrError {
original: s.to_string(),
}),
}
}
}
impl std::fmt::Display for DownloadType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
DownloadType::Unavailable => write!(f, "unavailable"),
DownloadType::DRMFree => write!(f, "drm-free"),
DownloadType::Watermarked => write!(f, "visible-watermark"),
DownloadType::InvisibleWatermarked => write!(f, "invisible-watermark"),
}
}
}