use std::collections::BTreeMap;
use anyhow::{Result, anyhow};
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
pub fn build_sign_payload(method: &str, host: &str, path: &str, params: &BTreeMap<String, String>) -> String {
let mut kvs: Vec<_> = params.iter().collect();
kvs.sort_by(|a, b| a.0.cmp(b.0));
let qs = kvs.iter()
.map(|(k, v)| format!("{}={}", k, utf8_percent_encode(v, NON_ALPHANUMERIC)))
.collect::<Vec<_>>().join("&");
format!("{}\n{}\n{}\n{}", method, host, path, qs)
}
pub fn utc_now() -> String {
use chrono::Utc;
Utc::now().format("%Y-%m-%dT%H:%M:%S").to_string()
}