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
use std::io::{Cursor, Read, Write};
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
use crate::{cursor_ext::CursorExt, error::Error};
use super::PropertyTrait;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct NameProperty {
pub value: String,
}
impl NameProperty {
pub(crate) fn read(cursor: &mut Cursor<Vec<u8>>, include_header: bool) -> Result<Self, Error> {
if include_header {
let _length = cursor.read_u64::<LittleEndian>()?;
cursor.read_exact(&mut [0u8; 1])?;
}
let value = cursor.read_string()?;
Ok(NameProperty { value })
}
}
impl PropertyTrait for NameProperty {
fn write(&self, cursor: &mut Cursor<Vec<u8>>, include_header: bool) -> Result<(), Error> {
if include_header {
cursor.write_string("NameProperty")?;
let property_length = self.value.len() + 1 + 4; cursor.write_i64::<LittleEndian>(property_length as i64)?;
let _ = cursor.write(&[0u8; 1])?;
}
cursor.write_string(&self.value)?;
Ok(())
}
}