///|
fn main {
let original_request = @cache.request(
"GET",
"https://api.example.test/catalog",
headers=@cache.Headers::empty().add("accept-language", "zh-CN"),
)
let origin_response = @cache.response(
200,
headers=@cache.Headers::empty()
.add("cache-control", "public, max-age=120")
.add("vary", "accept-language")
.add("etag", "\"catalog-v7\""),
)
let stored = @cache.stored_response(
original_request, origin_response, 1000L, 1002L,
)
let presented = @cache.request(
"GET",
"https://api.example.test/catalog",
headers=@cache.Headers::empty().add("accept-language", "zh-CN"),
)
let fresh = @cache.evaluate_reuse(
Some(stored),
presented,
@cache.SharedCache,
1060L,
)
println("at t=1060: " + verdict_name(fresh.verdict))
let stale = @cache.evaluate_reuse(
Some(stored),
presented,
@cache.SharedCache,
1200L,
)
println("at t=1200: " + verdict_name(stale.verdict))
let validation = @cache.prepare_validation(stored, presented)
println(
"conditional header: " +
validation.headers.first("if-none-match").unwrap_or(""),
)
}
///|
fn verdict_name(verdict : @cache.ReuseVerdict) -> String {
match verdict {
@cache.ReuseFresh => "reuse-fresh"
@cache.Revalidate => "revalidate"
@cache.ServeStale => "serve-stale"
@cache.FetchFromOrigin => "fetch-from-origin"
@cache.OnlyIfCachedMiss => "only-if-cached-miss"
@cache.NotReusable => "not-reusable"
}
}