slpm_file/
header_v0.rs

1use crate::datatype::DataType;
2use crate::header_binary_v0::HeaderBinaryV0;
3
4#[derive(Clone, Hash, Debug, Eq, Ord, PartialOrd, PartialEq)]
5pub struct HeaderV0 {
6	/// u16 Version indicating which struct to deserialize to (for future)
7	pub version: u16,
8
9	/// u8 Matched to enum DataType
10	pub datatype: DataType,
11
12	/// UTF-8 string with 1024 bits capacity
13	pub name: String,
14
15	/// u64 Create date in seconds after epoch
16	pub created: u64,
17
18	/// u64 Edit date in seconds after epoch
19	pub edited: u64,
20
21	/// UTF-8 string with 1024 bits capacity
22	pub file_name: String,
23
24	/// u64 stores buffer size for decoding purposes (maybe have buffer size = cypher length when not used?)
25	pub buffer_size: u64,
26}
27
28impl HeaderV0 {
29	/// # Panics
30	///
31	/// Panics when any of the values cannot be parsed as provided or the enum integer is unknown
32	#[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