1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#![doc(hidden)] pub(crate) fn to_hex<'a>(input: &[u8], output: &'a mut [u8]) -> Option<&'a str> { use std::str; const CHARS: &[u8] = b"0123456789abcdef"; if output.len() < input.len() * 2 { return None; } let mut ind = 0; for &byte in input { output[ind] = CHARS[(byte >> 4) as usize]; output[ind + 1] = CHARS[(byte & 0xf) as usize]; ind += 2; } unsafe { Some(str::from_utf8_unchecked(&output[0..input.len() * 2])) } } pub fn get_content_length(headers: &http::HeaderMap) -> Option<usize> { headers.get(http::header::CONTENT_LENGTH).and_then(|h| { h.to_str() .map_err(|_| ()) .and_then(|hv| hv.parse::<u64>().map(|l| l as usize).map_err(|_| ())) .ok() }) } #[allow(clippy::trivially_copy_pass_by_ref)] pub(crate) fn if_false(v: &bool) -> bool { !v } pub(crate) const QUERY_ENCODE_SET: &percent_encoding::AsciiSet = &percent_encoding::CONTROLS .add(b' ') .add(b'"') .add(b'#') .add(b'<') .add(b'>'); pub(crate) const PATH_ENCODE_SET: &percent_encoding::AsciiSet = &QUERY_ENCODE_SET .add(b'`') .add(b'?') .add(b'{') .add(b'}') .add(b'%') .add(b'/');