use crate::utils::Endianness;
#[derive(Clone, Debug)]
pub struct ParseOptions {
pub(crate) trim_null_strings: bool,
pub(crate) strict_encoding: bool,
pub(crate) endianness: Endianness,
pub(crate) length_prefixed_fields: bool,
pub(crate) verbose_errors: bool,
#[cfg(feature = "crypto")]
pub(crate) key: Vec<u8>,
#[cfg(feature = "crypto")]
pub(crate) iv: Vec<u8>,
}
impl Default for ParseOptions {
fn default() -> Self {
Self {
trim_null_strings: false,
endianness: Endianness::BigEndian,
strict_encoding: false,
length_prefixed_fields: false,
verbose_errors: false,
#[cfg(feature = "crypto")]
key: Vec::new(),
#[cfg(feature = "crypto")]
iv: Vec::new(),
}
}
}
impl ParseOptions {
pub fn set_trim_null_strings(&mut self) {
self.trim_null_strings = true;
}
pub fn unset_trim_null_strings(&mut self) {
self.trim_null_strings = false;
}
pub fn set_strict_encoding(&mut self) {
self.strict_encoding = true;
}
pub fn unset_strict_encoding(&mut self) {
self.strict_encoding = false;
}
pub fn set_endianness(&mut self, endian: Endianness) {
self.endianness = endian;
}
pub fn set_verbose_errors(&mut self) {
self.verbose_errors = true;
}
pub fn unset_verbose_errors(&mut self) {
self.verbose_errors = false;
}
pub fn set_length_prefixed_fields(&mut self) {
self.length_prefixed_fields = true;
}
pub fn unset_length_prefixed_fields(&mut self) {
self.length_prefixed_fields = false;
}
pub fn with_trim_null_strings(mut self) -> Self {
self.trim_null_strings = true;
self
}
pub fn with_strict_encoding(mut self) -> Self {
self.strict_encoding = true;
self
}
pub fn with_verbose_errors(mut self) -> Self {
self.verbose_errors = true;
self
}
pub fn with_length_prefixed_fields(mut self) -> Self {
self.length_prefixed_fields = true;
self
}
}
#[derive(Debug, Clone)]
pub struct EncodingOptions {
pub(crate) endianness: Endianness,
pub(crate) prepend_data_size: bool,
#[cfg(feature = "crypto")]
pub(crate) key: Vec<u8>,
#[cfg(feature = "crypto")]
pub(crate) iv: Vec<u8>,
}
impl Default for EncodingOptions {
fn default() -> Self {
Self {
endianness: Endianness::BigEndian,
prepend_data_size: false,
#[cfg(feature = "crypto")]
key: Vec::new(),
#[cfg(feature = "crypto")]
iv: Vec::new(),
}
}
}
impl EncodingOptions {
pub fn set_prepended_data_size(&mut self) {
self.prepend_data_size = true;
}
pub fn unset_prepended_data_size(&mut self) {
self.prepend_data_size = false;
}
pub fn set_endianness(&mut self, endianness: Endianness) {
self.endianness = endianness;
}
pub fn with_prepended_data_size(mut self) -> Self {
self.prepend_data_size = true;
self
}
pub fn with_endianness(mut self, endianness: Endianness) -> Self {
self.endianness = endianness;
self
}
}