use alloc::{sync::Arc, vec::Vec};
mod accounting;
mod construction;
struct SharedJpegInputInner {
bytes: Vec<u8>,
}
#[derive(Clone)]
enum SharedJpegInputStorage {
Copied(Arc<SharedJpegInputInner>),
ArcSlice(Arc<[u8]>),
}
#[derive(Clone)]
#[doc(hidden)]
pub struct SharedJpegInput(SharedJpegInputStorage);
impl SharedJpegInput {
#[must_use]
pub fn as_slice(&self) -> &[u8] {
match &self.0 {
SharedJpegInputStorage::Copied(input) => input.bytes.as_slice(),
SharedJpegInputStorage::ArcSlice(input) => input.as_ref(),
}
}
#[must_use]
pub fn as_bytes(&self) -> &[u8] {
self.as_slice()
}
}
impl AsRef<[u8]> for SharedJpegInput {
fn as_ref(&self) -> &[u8] {
self.as_slice()
}
}
impl core::fmt::Debug for SharedJpegInput {
fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
formatter
.debug_struct("SharedJpegInput")
.field("len", &self.as_slice().len())
.field("capacity", &self.data_capacity())
.finish_non_exhaustive()
}
}