#[derive(Copy, Clone, Debug, Default)]
pub struct ValueWriterConfig {
container_encoding: ContainerEncoding,
symbol_value_encoding: SymbolValueEncoding,
annotations_encoding: AnnotationsEncoding,
field_name_encoding: FieldNameEncoding,
}
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default)]
pub enum ContainerEncoding {
#[default]
LengthPrefixed,
Delimited,
}
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default)]
#[non_exhaustive]
pub enum SymbolValueEncoding {
#[default]
SymbolIds,
InlineText,
NewSymbolsAsInlineText,
}
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default)]
#[non_exhaustive]
pub enum AnnotationsEncoding {
#[default]
SymbolIds,
InlineText,
NewSymbolsAsInlineText,
}
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default)]
#[non_exhaustive]
#[allow(clippy::enum_variant_names)]
pub enum FieldNameEncoding {
#[default]
SymbolIds,
InlineText,
NewSymbolsAsInlineText,
}
impl ValueWriterConfig {
pub const fn text() -> Self {
ValueWriterConfig {
container_encoding: ContainerEncoding::Delimited,
symbol_value_encoding: SymbolValueEncoding::InlineText,
annotations_encoding: AnnotationsEncoding::InlineText,
field_name_encoding: FieldNameEncoding::InlineText,
}
}
pub const fn binary() -> Self {
ValueWriterConfig {
container_encoding: ContainerEncoding::LengthPrefixed,
symbol_value_encoding: SymbolValueEncoding::SymbolIds,
annotations_encoding: AnnotationsEncoding::SymbolIds,
field_name_encoding: FieldNameEncoding::SymbolIds,
}
}
pub const fn container_encoding(&self) -> ContainerEncoding {
self.container_encoding
}
pub const fn symbol_value_encoding(&self) -> SymbolValueEncoding {
self.symbol_value_encoding
}
pub const fn field_name_encoding(&self) -> FieldNameEncoding {
self.field_name_encoding
}
pub const fn annotations_encoding(&self) -> AnnotationsEncoding {
self.annotations_encoding
}
pub const fn has_delimited_containers(&self) -> bool {
matches!(self.container_encoding, ContainerEncoding::Delimited)
}
pub const fn with_delimited_containers(mut self) -> Self {
self.container_encoding = ContainerEncoding::Delimited;
self
}
pub const fn with_container_encoding(mut self, container_encoding: ContainerEncoding) -> Self {
self.container_encoding = container_encoding;
self
}
pub const fn with_symbol_value_encoding(
mut self,
symbol_value_encoding: SymbolValueEncoding,
) -> Self {
self.symbol_value_encoding = symbol_value_encoding;
self
}
pub const fn with_annotations_encoding(
mut self,
annotations_encoding: AnnotationsEncoding,
) -> Self {
self.annotations_encoding = annotations_encoding;
self
}
pub const fn with_field_name_encoding(
mut self,
field_name_encoding: FieldNameEncoding,
) -> Self {
self.field_name_encoding = field_name_encoding;
self
}
}