use super::{DictionaryId, DictionaryReference};
use crate::dictionary::PreparedDictionary;
use crate::{EncoderConfig, InputSize};
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct FramingConfig {
pub container: bool,
pub central_directory: bool,
pub repeat_metadata: bool,
pub chunk_bytes: usize,
pub max_metadata_bytes: usize,
pub max_buffer_bytes: usize,
pub max_resources: u64,
pub max_chunks: u64,
}
impl Default for FramingConfig {
fn default() -> Self {
Self {
container: true,
central_directory: true,
repeat_metadata: false,
chunk_bytes: 65536,
max_metadata_bytes: 1 << 20,
max_buffer_bytes: 8 << 20,
max_resources: 10000,
max_chunks: 1000000,
}
}
}
#[derive(Debug, Default, Clone, Copy)]
pub struct ResourceOptions {
pub hidden: bool,
pub id: Option<DictionaryId>,
}
#[derive(Debug, Default, Clone, Copy)]
pub enum MetadataEncoding<'a> {
#[default]
Uncompressed,
Brotli,
Shared {
dictionary: &'a PreparedDictionary,
references: &'a [DictionaryReference],
},
}
#[derive(Debug, Default, Clone, Copy)]
pub struct MetadataOptions<'a> {
pub encoding: MetadataEncoding<'a>,
pub repeated_encoding: MetadataEncoding<'a>,
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct FramedEncodeConfig {
encoder: EncoderConfig,
framing: FramingConfig,
}
impl FramedEncodeConfig {
pub const fn encoder_config(&self) -> &EncoderConfig {
&self.encoder
}
pub const fn framing_config(&self) -> &FramingConfig {
&self.framing
}
pub const fn with_encoder_config(mut self, value: EncoderConfig) -> Self {
self.encoder = value;
self
}
pub const fn with_framing_config(mut self, value: FramingConfig) -> Self {
self.framing = value;
self
}
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct FramedEncodeStreamConfig {
input_size: InputSize,
}
impl FramedEncodeStreamConfig {
pub const fn input_size(&self) -> InputSize {
self.input_size
}
pub const fn with_input_size(mut self, value: InputSize) -> Self {
self.input_size = value;
self
}
}
impl From<InputSize> for FramedEncodeStreamConfig {
fn from(value: InputSize) -> Self {
Self { input_size: value }
}
}