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
use crate::shared::file_like::FileLike;
use crate::shared::signed_file::SignedFile;
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};

#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct ServerFile {
    pub file: SignedFile,
    pub version: u64,
}

pub trait IntoServerFile {
    fn add_time(self, version: u64) -> ServerFile;
}

impl IntoServerFile for SignedFile {
    fn add_time(self, version: u64) -> ServerFile {
        ServerFile { file: self, version }
    }
}

trait FromSignedFile {
    fn from(file: SignedFile, version: u64) -> ServerFile {
        file.add_time(version)
    }
}

impl Display for ServerFile {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.display())
    }
}