use base64::Engine as _;
use base64::engine::general_purpose::URL_SAFE_NO_PAD;
use serde::Serialize;
use crate::strict::{DeserializeStrict, from_slice};
pub const MAX_HEADER_REQUEST_BYTES: usize = 64 * 1024;
#[derive(Debug)]
pub struct HeaderRequestError;
pub fn encode_header_request(request: &impl Serialize) -> Result<String, serde_json::Error> {
Ok(URL_SAFE_NO_PAD.encode(serde_json::to_vec(request)?))
}
pub fn decode_header_request<T: for<'de> DeserializeStrict<'de>>(
value: &str,
) -> Result<T, HeaderRequestError> {
if value.len() > MAX_HEADER_REQUEST_BYTES {
return Err(HeaderRequestError);
}
let json = URL_SAFE_NO_PAD
.decode(value)
.map_err(|_| HeaderRequestError)?;
from_slice(&json).map_err(|_| HeaderRequestError)
}