1use crate::datatype::DataType;
2use crate::header_binary_v0::HeaderBinaryV0;
3
4#[derive(Clone, Hash, Debug, Eq, Ord, PartialOrd, PartialEq)]
5pub struct HeaderV0 {
6 pub version: u16,
8
9 pub datatype: DataType,
11
12 pub name: String,
14
15 pub created: u64,
17
18 pub edited: u64,
20
21 pub file_name: String,
23
24 pub buffer_size: u64,
26}
27
28impl HeaderV0 {
29 #[must_use]
33 pub fn from_binary_header(binary_header: &HeaderBinaryV0) -> Self {
34 let datatype: DataType;
35 match u8::from_be_bytes(binary_header.datatype) {
36 0 => { datatype = DataType::Password }
37 1 => { datatype = DataType::File }
38 _ => { panic!("Cannot match header datatype") }
39 }
40 Self {
41 version: u16::from_be_bytes(binary_header.version),
42 datatype,
43 name: String::from_utf8(Vec::from(binary_header.name)).unwrap(),
44 created: u64::from_be_bytes(binary_header.created),
45 edited: u64::from_be_bytes(binary_header.edited),
46 file_name: String::from_utf8(Vec::from(binary_header.file_name)).unwrap(),
47 buffer_size: u64::from_be_bytes(binary_header.buffer_size),
48 }
49 }
50}
51
52