use std::fmt::Display;
use serde::{Deserialize, Serialize};
use super::Domain;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MastodonEntry {
pub domain: String,
pub severity: Level,
pub public_comment: String,
pub reject_media: bool,
pub reject_reports: bool,
pub obfuscate: bool,
}
impl MastodonEntry {
pub fn as_csv_entry(&self) -> String {
format!(
"{},{},\"{}\",FALSE,FALSE,FALSE",
self.domain, self.severity, self.public_comment
)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Level {
Silence,
Block,
}
impl Display for Level {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Level::Silence => write!(f, "silence"),
Level::Block => write!(f, "block"),
}
}
}
impl From<super::Level> for Level {
fn from(value: super::Level) -> Self {
match value {
super::Level::Low => Self::Silence,
super::Level::Medium => Self::Block,
super::Level::Severe => Self::Block,
}
}
}
impl From<Domain> for MastodonEntry {
fn from(value: Domain) -> Self {
Self {
domain: value.domain,
severity: value.level.into(),
public_comment: value.reason.unwrap_or_default(),
reject_media: false,
reject_reports: false,
obfuscate: false,
}
}
}