use axum::{body::Body, http::Request};
use axum_extra::headers::Cookie;
use axum_extra::headers::Header;
use crate::headers::AcceptLanguageHeader;
use crate::language::LanguageManifest;
use crate::language::UnicodeLanguageIdentifier;
pub static LANGUAGE_COOKIE_NAME: &str = "lib_humus_language";
pub fn language_from_cookie(
req: &Request<Body>,
language_manifest: &LanguageManifest,
) -> Option<UnicodeLanguageIdentifier> {
let cookie_header_values = req.headers().get_all(Cookie::name());
let mut language = Cookie::decode(&mut cookie_header_values.iter())
.ok()?
.get(LANGUAGE_COOKIE_NAME)?
.parse()
.ok()?;
if language_manifest.languages.contains_key(&language) {
Some(language)
} else {
language.script = None;
language.region = None;
if language_manifest.languages.contains_key(&language) {
Some(language)
} else {
None
}
}
}
pub fn language_from_accept_language_header(
req: &Request<Body>,
language_manifest: &LanguageManifest,
) -> Option<UnicodeLanguageIdentifier> {
let language_header = req.headers().get("accept-language")?.to_str().ok()?;
let language_header = AcceptLanguageHeader::new(language_header);
language_manifest.get_best_fitting_language(&language_header)
}