mirror of
https://github.com/lexmount/moli.git
synced 2026-10-03 16:00:45 +00:00
Carry raw response header values through fetch, caches, redirects, renderer delivery, workers, and protocol records. Convert explicitly at WebIDL and protocol text boundaries while preserving opaque bytes. Keep legacy CacheStorage and service worker metadata readable, and advance the HTTP cache format for raw header values. Validation: - cargo fmt --all - cargo clippy --workspace --all-targets --all-features -- -D warnings - cargo nextest run --no-fail-fast
26 lines
801 B
Rust
26 lines
801 B
Rust
use encoding_rs::Encoding;
|
|
|
|
use crate::{encoding_for_label, encoding_from_response_headers};
|
|
|
|
pub fn decode_utf8(bytes: &[u8]) -> String {
|
|
encoding_rs::UTF_8
|
|
.decode_with_bom_removal(bytes)
|
|
.0
|
|
.into_owned()
|
|
}
|
|
|
|
pub fn decode_classic_script_source(
|
|
bytes: &[u8],
|
|
headers: &[(String, Vec<u8>)],
|
|
script_charset: Option<&str>,
|
|
document_character_set: Option<&str>,
|
|
) -> String {
|
|
let encoding = Encoding::for_bom(bytes)
|
|
.map(|(encoding, _)| encoding)
|
|
.or_else(|| encoding_from_response_headers(headers))
|
|
.or_else(|| script_charset.and_then(encoding_for_label))
|
|
.or_else(|| document_character_set.and_then(encoding_for_label))
|
|
.unwrap_or(encoding_rs::UTF_8);
|
|
encoding.decode_with_bom_removal(bytes).0.into_owned()
|
|
}
|