lockbook_shared/
file.rs

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}