in src/azure/credential.rs [527:564]
fn canonicalize_resource(account: &str, uri: &Url) -> String {
let mut can_res: String = String::new();
can_res.push('/');
can_res.push_str(account);
can_res.push_str(uri.path().to_string().as_str());
can_res.push('\n');
// query parameters
let query_pairs = uri.query_pairs();
{
let mut qps: Vec<String> = Vec::new();
for (q, _) in query_pairs {
if !(qps.iter().any(|x| x == &*q)) {
qps.push(q.into_owned());
}
}
qps.sort();
for qparam in qps {
// find correct parameter
let ret = lexy_sort(query_pairs, &qparam);
can_res = can_res + &qparam.to_lowercase() + ":";
for (i, item) in ret.iter().enumerate() {
if i > 0 {
can_res.push(',');
}
can_res.push_str(item);
}
can_res.push('\n');
}
};
can_res[0..can_res.len() - 1].to_owned()
}