1use crate::account::Username;
2use crate::file_metadata::FileType;
3use serde::{Deserialize, Serialize};
4use std::fmt;
5use std::str::FromStr;
6use uuid::Uuid;
7
8#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone, Copy)]
9pub enum ShareMode {
10 Write,
11 Read,
12}
13
14impl FromStr for ShareMode {
15 type Err = ();
16
17 fn from_str(s: &str) -> Result<Self, Self::Err> {
18 match s {
19 "Write" => Ok(ShareMode::Write),
20 "Read" => Ok(ShareMode::Read),
21 _ => Err(()),
22 }
23 }
24}
25
26impl fmt::Display for ShareMode {
27 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
28 write!(f, "{:?}", self)
29 }
30}
31
32#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
33pub struct Share {
34 pub mode: ShareMode,
35 pub shared_by: Username,
36 pub shared_with: Username,
37}
38
39#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
40pub struct File {
41 pub id: Uuid,
42 pub parent: Uuid,
43 pub name: String,
44 pub file_type: FileType,
45 pub last_modified: u64,
46 pub last_modified_by: Username,
47 pub shares: Vec<Share>,
48}
49
50impl File {
51 pub fn is_document(&self) -> bool {
52 self.file_type == FileType::Document
53 }
54
55 pub fn is_folder(&self) -> bool {
56 self.file_type == FileType::Folder
57 }
58}