use bincode_next::Encode;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Encode)]
#[serde(tag = "type", content = "value")]
pub enum IconRequest {
#[serde(rename = "path")]
Path(String),
#[serde(rename = "url")]
Url(String),
#[serde(rename = "extension")]
Extension(String),
#[serde(rename = "data")]
Data(String),
}
impl IconRequest {
pub fn value(&self) -> &str {
match self {
IconRequest::Path(s) | IconRequest::Url(s) | IconRequest::Extension(s) => s.as_str(),
IconRequest::Data(s) => s.as_str(),
}
}
pub fn is_empty(&self) -> bool {
self.value().is_empty()
}
pub fn get_hash_string(&self) -> String {
let mut hasher = blake3::Hasher::new();
let _ = bincode_next::encode_into_std_write(
self,
&mut hasher,
bincode_next::config::standard(),
);
hasher.finalize().to_hex().to_string()
}
}