use crate::{entities::app::App, impl_def_and_def_mut}; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use serde::{Deserialize, Serialize}; use std::fmt::Formatter; #[derive(Eq, PartialEq, ProtoBuf, Default, Debug, Clone, Serialize, Deserialize)] pub struct Trash { #[pb(index = 1)] pub id: String, #[pb(index = 2)] pub name: String, #[pb(index = 3)] pub modified_time: i64, #[pb(index = 4)] pub create_time: i64, #[pb(index = 5)] pub ty: TrashType, } #[derive(PartialEq, Debug, Default, ProtoBuf, Clone)] pub struct RepeatedTrash { #[pb(index = 1)] pub items: Vec, } impl_def_and_def_mut!(RepeatedTrash, Trash); impl std::convert::From for Trash { fn from(app: App) -> Self { Trash { id: app.id, name: app.name, modified_time: app.modified_time, create_time: app.create_time, ty: TrashType::TrashApp, } } } #[derive(Eq, PartialEq, Debug, ProtoBuf_Enum, Clone, Serialize, Deserialize)] pub enum TrashType { Unknown = 0, TrashView = 1, TrashApp = 2, } impl std::convert::TryFrom for TrashType { type Error = String; fn try_from(value: i32) -> Result { match value { 0 => Ok(TrashType::Unknown), 1 => Ok(TrashType::TrashView), 2 => Ok(TrashType::TrashApp), _ => Err(format!("Invalid trash type: {}", value)), } } } impl std::default::Default for TrashType { fn default() -> Self { TrashType::Unknown } } #[derive(PartialEq, ProtoBuf, Default, Debug, Clone)] pub struct RepeatedTrashId { #[pb(index = 1)] pub items: Vec, #[pb(index = 2)] pub delete_all: bool, } impl std::fmt::Display for RepeatedTrashId { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { f.write_str(&format!( "{:?}", &self.items.iter().map(|item| format!("{}", item)).collect::>() )) } } impl RepeatedTrashId { pub fn all() -> RepeatedTrashId { RepeatedTrashId { items: vec![], delete_all: true, } } } impl std::convert::From> for RepeatedTrashId { fn from(items: Vec) -> Self { RepeatedTrashId { items, delete_all: false, } } } impl std::convert::From> for RepeatedTrashId { fn from(trash: Vec) -> Self { let items = trash .into_iter() .map(|t| TrashId { id: t.id, ty: t.ty }) .collect::>(); RepeatedTrashId { items, delete_all: false, } } } #[derive(PartialEq, ProtoBuf, Default, Debug, Clone)] pub struct TrashId { #[pb(index = 1)] pub id: String, #[pb(index = 2)] pub ty: TrashType, } impl std::convert::From<&Trash> for TrashId { fn from(trash: &Trash) -> Self { TrashId { id: trash.id.clone(), ty: trash.ty.clone(), } } } impl std::fmt::Display for TrashId { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { f.write_str(&format!("{:?}:{}", self.ty, self.id)) } }