///|
pub fn api_preferences_json_zh_gzip() -> RequestPreferences {
RequestPreferences(
accept="application/json;q=1, application/problem+json;q=0.9, */*;q=0.1",
accept_language="zh-CN, zh;q=0.8, en;q=0.5",
accept_encoding="br;q=1, gzip;q=0.9, identity;q=0.1",
accept_charset="utf-8, *;q=0.2",
)
}
///|
pub fn browser_preferences_html_en_br() -> RequestPreferences {
RequestPreferences(
accept="text/html, application/xhtml+xml;q=0.9, application/json;q=0.6, */*;q=0.1",
accept_language="en-US, en;q=0.8, zh;q=0.5",
accept_encoding="br, gzip;q=0.8, identity;q=0.2",
accept_charset="utf-8",
)
}
///|
pub fn conservative_preferences() -> RequestPreferences {
RequestPreferences(
accept="application/json",
accept_language="en",
accept_encoding="identity",
accept_charset="utf-8",
)
}
///|
pub fn api_variants() -> Array[ServerVariant] {
[
ServerVariant(
"json.zh.gzip",
"application/json;charset=utf-8",
language="zh-CN",
encoding="gzip",
charset="utf-8",
server_weight=1000,
),
ServerVariant(
"json.zh.br",
"application/json;charset=utf-8",
language="zh-CN",
encoding="br",
charset="utf-8",
server_weight=980,
),
ServerVariant(
"problem.zh.gzip",
"application/problem+json;charset=utf-8",
language="zh-CN",
encoding="gzip",
charset="utf-8",
server_weight=900,
),
ServerVariant(
"json.en.identity",
"application/json;charset=utf-8",
language="en-US",
encoding="identity",
charset="utf-8",
server_weight=950,
),
]
}
///|
pub fn document_variants() -> Array[ServerVariant] {
[
ServerVariant(
"html.en.br",
"text/html;charset=utf-8",
language="en-US",
encoding="br",
charset="utf-8",
server_weight=1000,
),
ServerVariant(
"html.en.gzip",
"text/html;charset=utf-8",
language="en-US",
encoding="gzip",
charset="utf-8",
server_weight=980,
),
ServerVariant(
"json.en.gzip",
"application/json;charset=utf-8",
language="en-US",
encoding="gzip",
charset="utf-8",
server_weight=850,
),
ServerVariant(
"html.zh.gzip",
"text/html;charset=utf-8",
language="zh-CN",
encoding="gzip",
charset="utf-8",
server_weight=900,
),
]
}
///|
pub fn negotiate_api_scenario() -> Result[VariantDecision, ParseError] {
negotiate_variant(api_preferences_json_zh_gzip(), api_variants())
}
///|
pub fn negotiate_browser_document_scenario() -> Result[
VariantDecision,
ParseError,
] {
negotiate_variant(browser_preferences_html_en_br(), document_variants())
}
///|
pub fn negotiate_conservative_api_scenario() -> Result[
VariantDecision,
ParseError,
] {
negotiate_variant(conservative_preferences(), api_variants())
}
///|
pub fn api_response_summary() -> Result[ResponseSummary, ParseError] {
match negotiate_api_scenario() {
Ok(decision) => Ok(summarize_response(decision))
Err(err) => Err(err)
}
}
///|
pub fn browser_response_summary() -> Result[ResponseSummary, ParseError] {
match negotiate_browser_document_scenario() {
Ok(decision) => Ok(summarize_response(decision))
Err(err) => Err(err)
}
}
///|
pub fn audit_api_scenario() -> HeaderAudit {
audit_preferences(api_preferences_json_zh_gzip())
}
///|
pub fn audit_browser_scenario() -> HeaderAudit {
audit_preferences(browser_preferences_html_en_br())
}
///|
pub fn scenario_report() -> String {
let buf = StringBuilder()
match negotiate_api_scenario() {
Ok(decision) => buf.write_string(format_variant_decision(decision))
Err(_) => buf.write_string("api scenario failed")
}
buf.write_string("\n")
match negotiate_browser_document_scenario() {
Ok(decision) => buf.write_string(format_variant_decision(decision))
Err(_) => buf.write_string("browser scenario failed")
}
buf.write_string("\n")
buf.write_string(format_audit(audit_browser_scenario()))
buf.to_string()
}