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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
use std::cmp::{PartialEq};
use std::io::{Cursor};
use crate::{
Result,
HeaderCoding,
ValueEncoder,
ValueDecoder,
HEADER_IDENTIFIER_SEGMENT_HEADER,
};
#[derive(Debug,Clone,Eq)]
pub struct SegmentHeader {
version: u8,
unique_identifier: i64,
segment_number: u64,
}
impl SegmentHeader {
pub fn new_empty(version: u8, unique_identifier: i64, segment_number: u64) -> SegmentHeader {
Self {
version: version,
unique_identifier: unique_identifier,
segment_number: segment_number,
}
}
pub fn new(version: u8, unique_identifier: i64, segment_number: u64) -> SegmentHeader {
Self {
version: version,
unique_identifier: unique_identifier,
segment_number: segment_number,
}
}
pub fn unique_identifier(&self) -> i64 {
self.unique_identifier
}
pub fn segment_number(&self) -> u64 {
self.segment_number
}
pub fn next_header(&self) -> SegmentHeader {
SegmentHeader {
version: self.version,
unique_identifier: self.unique_identifier,
segment_number: self.segment_number+1,
}
}
}
impl HeaderCoding for SegmentHeader {
type Item = SegmentHeader;
fn identifier() -> u32 {
HEADER_IDENTIFIER_SEGMENT_HEADER
}
fn version(&self) -> u8 {
self.version
}
fn encode_header(&self) -> Vec<u8> {
let mut vec = Vec::new();
vec.append(&mut self.version.encode_directly());
vec.append(&mut self.unique_identifier.encode_directly());
vec.append(&mut self.segment_number.encode_directly());
vec
}
fn decode_content(data: Vec<u8>) -> Result<SegmentHeader> {
let mut cursor = Cursor::new(data);
let version = u8::decode_directly(&mut cursor)?;
let unique_identifier = i64::decode_directly(&mut cursor)?;
let segment_number = u64::decode_directly(&mut cursor)?;
Ok(SegmentHeader::new(version, unique_identifier, segment_number))
}
}
impl PartialEq for SegmentHeader {
fn eq(&self, other: &Self) -> bool {
self.segment_number == other.segment_number
}
}