2022-07-04 14:28:41 +08:00
|
|
|
use serde::de::Visitor;
|
2022-06-12 22:01:02 +08:00
|
|
|
use serde::{Deserialize, Serialize};
|
2022-07-04 14:28:41 +08:00
|
|
|
use serde_repr::*;
|
|
|
|
use std::fmt;
|
2023-02-07 20:56:01 +08:00
|
|
|
#[derive(Default, Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
|
2022-06-12 22:01:02 +08:00
|
|
|
pub struct TrashRevision {
|
2023-02-13 09:29:49 +08:00
|
|
|
pub id: String,
|
2022-06-12 22:01:02 +08:00
|
|
|
|
2023-02-13 09:29:49 +08:00
|
|
|
pub name: String,
|
2022-06-12 22:01:02 +08:00
|
|
|
|
2023-02-13 09:29:49 +08:00
|
|
|
#[serde(default)]
|
|
|
|
pub modified_time: i64,
|
2022-06-12 22:01:02 +08:00
|
|
|
|
2023-02-13 09:29:49 +08:00
|
|
|
#[serde(default)]
|
|
|
|
pub create_time: i64,
|
2022-06-12 22:01:02 +08:00
|
|
|
|
2023-02-13 09:29:49 +08:00
|
|
|
pub ty: TrashTypeRevision,
|
2022-06-12 22:01:02 +08:00
|
|
|
}
|
|
|
|
|
2023-02-07 20:56:01 +08:00
|
|
|
#[derive(Eq, PartialEq, Debug, Clone, Hash, Serialize_repr)]
|
2022-07-04 14:28:41 +08:00
|
|
|
#[repr(u8)]
|
|
|
|
pub enum TrashTypeRevision {
|
2023-02-13 09:29:49 +08:00
|
|
|
Unknown = 0,
|
|
|
|
TrashView = 1,
|
|
|
|
TrashApp = 2,
|
2022-06-13 20:59:46 +08:00
|
|
|
}
|
2022-07-04 14:28:41 +08:00
|
|
|
impl<'de> serde::Deserialize<'de> for TrashTypeRevision {
|
2023-02-13 09:29:49 +08:00
|
|
|
fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
|
|
|
|
where
|
|
|
|
D: serde::Deserializer<'de>,
|
|
|
|
{
|
|
|
|
struct TrashTypeVisitor();
|
|
|
|
|
|
|
|
impl<'de> Visitor<'de> for TrashTypeVisitor {
|
|
|
|
type Value = TrashTypeRevision;
|
|
|
|
|
|
|
|
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
|
|
|
formatter.write_str("expected enum TrashTypeRevision with type: u8")
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_i8<E>(self, v: i8) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
self.visit_u8(v as u8)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_i16<E>(self, v: i16) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
self.visit_u8(v as u8)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_i32<E>(self, v: i32) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
self.visit_u8(v as u8)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
self.visit_u8(v as u8)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_u8<E>(self, v: u8) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
let ty = match v {
|
|
|
|
0 => TrashTypeRevision::Unknown,
|
|
|
|
1 => TrashTypeRevision::TrashView,
|
|
|
|
2 => TrashTypeRevision::TrashApp,
|
|
|
|
_ => TrashTypeRevision::Unknown,
|
|
|
|
};
|
|
|
|
|
|
|
|
Ok(ty)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_u16<E>(self, v: u16) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
self.visit_u8(v as u8)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_u32<E>(self, v: u32) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
self.visit_u8(v as u8)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
self.visit_u8(v as u8)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn visit_str<E>(self, s: &str) -> Result<Self::Value, E>
|
|
|
|
where
|
|
|
|
E: serde::de::Error,
|
|
|
|
{
|
|
|
|
let value = match s {
|
|
|
|
"Unknown" => TrashTypeRevision::Unknown,
|
|
|
|
"TrashView" => TrashTypeRevision::TrashView,
|
|
|
|
"TrashApp" => TrashTypeRevision::TrashApp,
|
|
|
|
_ => TrashTypeRevision::Unknown,
|
|
|
|
};
|
|
|
|
Ok(value)
|
|
|
|
}
|
2022-06-12 22:01:02 +08:00
|
|
|
}
|
2023-02-13 09:29:49 +08:00
|
|
|
|
|
|
|
deserializer.deserialize_any(TrashTypeVisitor())
|
|
|
|
}
|
2022-06-12 22:01:02 +08:00
|
|
|
}
|
2022-07-04 14:28:41 +08:00
|
|
|
impl std::default::Default for TrashTypeRevision {
|
2023-02-13 09:29:49 +08:00
|
|
|
fn default() -> Self {
|
|
|
|
TrashTypeRevision::Unknown
|
|
|
|
}
|
2022-06-12 22:01:02 +08:00
|
|
|
}
|
2022-06-13 20:59:46 +08:00
|
|
|
|
2022-07-04 14:28:41 +08:00
|
|
|
impl std::convert::From<TrashTypeRevision> for u8 {
|
2023-02-13 09:29:49 +08:00
|
|
|
fn from(rev: TrashTypeRevision) -> Self {
|
|
|
|
match rev {
|
|
|
|
TrashTypeRevision::Unknown => 0,
|
|
|
|
TrashTypeRevision::TrashView => 1,
|
|
|
|
TrashTypeRevision::TrashApp => 2,
|
2022-06-13 20:59:46 +08:00
|
|
|
}
|
2023-02-13 09:29:49 +08:00
|
|
|
}
|
2022-06-13 20:59:46 +08:00
|
|
|
}
|