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 crate::serializer::{Serializable, StringPrefix};
use std::fmt;
pub struct PrefixString<T: StringPrefix + Copy + Serializable + fmt::Debug> {
prefix: T,
pub raw: String,
}
impl<T: StringPrefix + Copy + Serializable + fmt::Debug> PrefixString<T> {
pub fn new(prefix_length: T, raw: &str) -> PrefixString<T> {
PrefixString {
prefix: prefix_length,
raw: raw.to_string(),
}
}
pub fn prefix_length(&self) -> T {
self.prefix
}
}
impl<T: StringPrefix + Copy + Serializable + fmt::Debug> Serializable for PrefixString<T> {
fn to_bytes(&self) -> Vec<u8> {
let mut buffer = Vec::<u8>::new();
buffer.append(&mut self.prefix.to_bytes());
buffer.append(&mut self.raw.to_bytes());
buffer
}
}
impl<T: StringPrefix + Copy + Serializable + fmt::Debug> fmt::Debug for PrefixString<T> {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt.debug_struct("BitMapInfoIsh")
.field("len", &self.prefix_length())
.field("content", &self.raw)
.finish()
}
}