use core::time::Duration;
use bytes::Bytes;
mod upload;
mod metadata;
mod integration;
#[ derive( Debug, Clone ) ]
pub struct MediaProcessingConfig
{
pub max_memory_file_size : usize,
pub streaming_chunk_size : usize,
pub max_concurrent_operations : usize,
pub enable_compression : bool,
pub compression_quality : u8,
pub cache_ttl_seconds : u64,
pub max_cache_size_bytes : usize,
pub enable_metrics : bool,
pub retry_config : MediaRetryConfig,
pub thumbnail_config : Option< ThumbnailConfig >,
}
impl Default for MediaProcessingConfig
{
#[ inline ]
fn default() -> Self
{
Self {
max_memory_file_size : 10 * 1024 * 1024, streaming_chunk_size : 64 * 1024, max_concurrent_operations : 10,
enable_compression : true,
compression_quality : 85,
cache_ttl_seconds : 3600, max_cache_size_bytes : 100 * 1024 * 1024, enable_metrics : true,
retry_config : MediaRetryConfig::default(),
thumbnail_config : Some( ThumbnailConfig::default() ),
}
}
}
#[ derive( Debug, Clone ) ]
pub struct MediaRetryConfig
{
pub max_attempts : u32,
pub initial_delay : Duration,
pub max_delay : Duration,
pub backoff_multiplier : f64,
pub enable_jitter : bool,
}
impl Default for MediaRetryConfig
{
#[ inline ]
fn default() -> Self
{
Self {
max_attempts : 3,
initial_delay : Duration::from_millis( 100 ),
max_delay : Duration::from_secs( 10 ),
backoff_multiplier : 2.0,
enable_jitter : true,
}
}
}
#[ derive( Debug, Clone ) ]
pub struct ThumbnailConfig
{
pub enabled : bool,
pub width : u32,
pub height : u32,
pub quality : u8,
pub format : ThumbnailFormat,
}
impl Default for ThumbnailConfig
{
#[ inline ]
fn default() -> Self
{
Self {
enabled : true,
width : 256,
height : 256,
quality : 80,
format : ThumbnailFormat::WebP,
}
}
}
#[ derive( Debug, Clone, PartialEq, Eq ) ]
pub enum ThumbnailFormat
{
Jpeg,
Png,
WebP,
}
#[ derive( Debug, Clone ) ]
pub struct MediaCacheStatsReport
{
pub hits : u64,
pub misses : u64,
pub hit_rate : f64,
pub evictions : u64,
pub total_size_bytes : usize,
pub total_compressed_bytes : u64,
pub avg_compression_time_us : u64,
}
#[ derive( Debug, Clone ) ]
pub struct ProcessedMediaResult
{
pub processed_data : Bytes,
pub metadata : ProcessedMediaMetadata,
pub cache_hit : bool,
}
#[ derive( Debug, Clone ) ]
pub struct ProcessedMediaMetadata
{
pub original_size : usize,
pub processed_size : usize,
pub mime_type : String,
pub is_compressed : bool,
pub compression_ratio : f64,
pub processing_time_ms : u64,
pub thumbnail_data : Option< Bytes >,
}
#[ derive( Debug, Clone ) ]
pub struct MediaProcessingMetricsReport
{
pub files_processed : u64,
pub bytes_processed : u64,
pub avg_processing_time_ms : u64,
pub failed_operations : u64,
pub retries_performed : u64,
pub memory_high_watermark_bytes : usize,
pub cache_stats : MediaCacheStatsReport,
}
pub use self::{
upload ::{ MediaProcessingPipeline, MediaProcessingMetrics },
metadata ::{ MediaCache, MediaCacheStats, CachedMediaMetadata, ThumbnailGenerator },
integration ::OptimizedMediaApi,
};