use chrono::NaiveDateTime;
use std::ops::{Deref, DerefMut};
use uuid::Uuid;
use crate::db::IconId;
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
pub enum Icon {
BuiltIn(IconId),
Custom(Uuid),
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
pub struct CustomIcon {
pub(crate) id: Uuid,
pub name: Option<String>,
pub last_modification_time: Option<NaiveDateTime>,
pub data: Vec<u8>,
}
impl CustomIcon {
pub fn id(&self) -> Uuid {
self.id
}
pub fn name(&self) -> Option<&str> {
self.name.as_deref()
}
pub fn new(id: Uuid, name: Option<String>, last_modification_time: Option<NaiveDateTime>, data: Vec<u8>) -> Self {
Self {
id,
name,
last_modification_time,
data,
}
}
}
impl Deref for CustomIcon {
type Target = Vec<u8>;
fn deref(&self) -> &Self::Target {
&self.data
}
}
impl DerefMut for CustomIcon {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.data
}
}