rust_rcs_core/internet/
header_field.rs1use super::parameter::ParameterParser;
16use super::syntax;
17
18pub struct HeaderField<'a> {
19 pub value: &'a [u8],
20 pub parameters: &'a [u8],
21}
22
23impl HeaderField<'_> {
24 pub fn get_parameter_iterator(&self) -> ParameterParser {
25 ParameterParser::new(self.parameters, b';', false)
26 }
27}
28
29pub trait AsHeaderField<'a> {
30 type Target;
31 fn as_header_field(&'a self) -> Self::Target;
32}
33
34impl<'a> AsHeaderField<'a> for [u8] {
35 type Target = HeaderField<'a>;
36 fn as_header_field(&'a self) -> HeaderField {
37 if let Some(idx) = syntax::index_with_token_escaping(self, b';') {
38 HeaderField {
40 value: &self[..idx],
41 parameters: &self[idx + 1..],
42 }
43 } else {
44 HeaderField {
45 value: self,
46 parameters: &[],
47 }
48 }
49 }
50}
51
52impl<'a> AsHeaderField<'a> for Vec<u8> {
53 type Target = HeaderField<'a>;
54 fn as_header_field(&'a self) -> HeaderField {
55 <[u8]>::as_header_field(self)
56 }
57}