1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
use std::collections::HashMap; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct BasicServiceInfo { pub name: String, pub service_key: String, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct BasicHashList { pub hashes: Vec<String>, } #[derive(Clone, Debug, Default, Deserialize)] pub struct FileMetadataInfo { pub file_id: u64, pub hash: String, pub size: Option<u64>, pub mime: String, pub ext: String, pub width: Option<u32>, pub height: Option<u32>, pub duration: Option<u64>, pub has_audio: Option<bool>, pub num_frames: Option<u64>, pub num_words: Option<u64>, pub is_inbox: bool, pub is_local: bool, pub is_trashed: bool, pub known_urls: Vec<String>, pub service_names_to_statuses_to_tags: HashMap<String, HashMap<String, Vec<String>>>, pub service_names_to_statuses_to_display_tags: HashMap<String, HashMap<String, Vec<String>>>, } #[derive(Clone, Debug)] pub enum FileIdentifier { ID(u64), Hash(String), } impl FileIdentifier { pub fn hash<S: ToString>(hash: S) -> Self { Self::Hash(hash.to_string()) } } #[derive(Clone)] pub struct FileRecord { pub bytes: Vec<u8>, pub mime_type: String, } #[derive(Clone, Debug, Deserialize)] pub struct PageInformation { pub name: String, pub page_key: String, pub page_type: u32, #[serde(alias = "focused")] pub selected: Option<bool>, #[serde(default = "Vec::new")] pub pages: Vec<PageInformation>, } #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(untagged)] pub enum OptionalStringNumber { String(String), Number(u64), None, } impl From<u64> for OptionalStringNumber { fn from(value: u64) -> Self { Self::Number(value) } } impl From<String> for OptionalStringNumber { fn from(value: String) -> Self { Self::String(value) } } impl OptionalStringNumber { pub fn string(&self) -> Option<&str> { if let Self::String(s) = &self { Some(s) } else { None } } pub fn number(&self) -> Option<u64> { if let Self::Number(n) = &self { Some(*n) } else { None } } }