1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use std::sync::{Mutex, PoisonError};
use crate::{EtagIfNoneMatch, StaticResponse};
use super::FileResources;
#[derive(Debug)]
pub struct StaticContextManager {
pub resources: Mutex<FileResources>,
}
impl StaticContextManager {
#[inline]
pub(crate) fn new(resources: Mutex<FileResources>) -> StaticContextManager {
StaticContextManager {
resources,
}
}
#[inline]
pub fn build<S: AsRef<str>>(
&self,
etag_if_none_match: &EtagIfNoneMatch<'_>,
name: S,
) -> StaticResponse {
self.resources
.lock()
.unwrap_or_else(PoisonError::into_inner)
.get_resource(name.as_ref())
.map(|resource| {
if etag_if_none_match.weak_eq(resource.2) {
StaticResponse::not_modified()
} else {
StaticResponse::build(&resource.0, resource.1.clone(), resource.2)
}
})
.unwrap()
}
}