use kutil::{http::*, std::foster::*};
pub trait CacheWeight {
fn cache_weight(&self) -> usize;
}
impl CacheWeight for ETag {
fn cache_weight(&self) -> usize {
const SELF_SIZE: usize = size_of::<ETag>();
SELF_SIZE + self.tag.len()
}
}
impl CacheWeight for Language {
fn cache_weight(&self) -> usize {
const SELF_SIZE: usize = size_of::<Language>();
let mut size = SELF_SIZE;
for subtag in &self.0 {
size += subtag.len();
}
size
}
}
impl CacheWeight for MediaType {
fn cache_weight(&self) -> usize {
const SELF_SIZE: usize = size_of::<MediaType>();
SELF_SIZE + self.main.cache_weight() + self.subtype.cache_weight()
}
}
impl CacheWeight for MediaTypeSegment {
fn cache_weight(&self) -> usize {
const SELF_SIZE: usize = size_of::<MediaTypeSegment>();
SELF_SIZE + self.0.len()
}
}
impl CacheWeight for MediaTypeSelector {
fn cache_weight(&self) -> usize {
const SELF_SIZE: usize = size_of::<MediaTypeSelector>();
SELF_SIZE + self.main.cache_weight() + self.subtype.cache_weight()
}
}
impl<SelectionT> CacheWeight for Selector<SelectionT>
where
SelectionT: CacheWeight,
{
fn cache_weight(&self) -> usize {
let mut size = size_of::<Self>();
if let Self::Specific(selection) = self {
size += selection.cache_weight();
}
size
}
}