pub(crate) fn decode(mut s: &str, mut buf: &mut [u8], suffix: Option<&str>) -> bool {
if let Some(suffix) = suffix {
if let Some(idx) = s.rfind(suffix) {
s = &s[..idx]
}
}
let bytes = ceil(buf.len() as f64 * 4.0 / 3.0);
let padding = 4 - bytes % 4;
if s.len() != bytes + padding {
return false;
}
if s.trim_end_matches('=').len() != bytes {
return false;
}
base64::decode_config_slice(s, base64::STANDARD, &mut buf).is_ok()
}
#[allow(clippy::float_cmp)]
fn ceil(x: f64) -> usize {
assert!(x >= 0.0);
let u = x as usize;
if x == u as f64 {
u
} else {
u + 1
}
}