use super::{DictionaryReference, MetadataField, MetadataKind, MetadataOptions, ResourceOptions};
use crate::dictionary::PreparedDictionary;
use crate::{InputSize, StreamConfig};
#[derive(Clone, Copy, Debug)]
pub struct FramedInput<'a> {
pub items: &'a [FramedItem<'a>],
pub repeat_metadata_fields: Option<&'a [[u8; 2]]>,
}
impl<'a> From<&'a [FramedItem<'a>]> for FramedInput<'a> {
fn from(items: &'a [FramedItem<'a>]) -> Self {
Self {
items,
repeat_metadata_fields: None,
}
}
}
#[derive(Clone, Copy, Debug)]
pub enum FramedItem<'a> {
Resource(FramedResource<'a>),
Metadata {
kind: MetadataKind,
fields: &'a [MetadataField<'a>],
options: MetadataOptions<'a>,
},
Padding {
bytes: usize,
},
}
#[derive(Clone, Copy, Debug)]
pub struct FramedResource<'a> {
pub data: &'a [u8],
pub options: ResourceOptions,
pub stream: StreamConfig,
pub encoding: ResourceEncoding<'a>,
}
impl<'a> From<&'a [u8]> for FramedResource<'a> {
fn from(data: &'a [u8]) -> Self {
Self {
data,
options: ResourceOptions::default(),
stream: InputSize::Exact(data.len() as u64).into(),
encoding: ResourceEncoding::Brotli,
}
}
}
#[derive(Clone, Copy, Debug)]
pub enum ResourceEncoding<'a> {
Uncompressed,
Brotli,
Shared {
dictionary: &'a PreparedDictionary,
references: &'a [DictionaryReference],
},
}