htx-rs 0.1.1

火币 HTX 现货交易 Rust SDK,支持下单、撤单、查单等主要接口,签名算法兼容官方。
Documentation
//! 火币API签名字符串构造工具
// 参考 Python huobi/utils/api_signature.py
use std::collections::BTreeMap;
use anyhow::{Result, anyhow};
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};

/// 构造签名字符串
/// method: "GET"/"POST"
/// host: 域名(如 "api.huobi.pro")
/// path: 路径(如 "/v1/order/orders/place")
/// params: 所有参与签名的参数(已包含 AccessKeyId, SignatureVersion, SignatureMethod, Timestamp 等)
pub fn build_sign_payload(method: &str, host: &str, path: &str, params: &BTreeMap<String, String>) -> String {
    // 1. 参数按key排序
    let mut kvs: Vec<_> = params.iter().collect();
    kvs.sort_by(|a, b| a.0.cmp(b.0));
    // 2. 拼接为 k1=v1&k2=v2...(需url编码value)
    let qs = kvs.iter()
        .map(|(k, v)| format!("{}={}", k, utf8_percent_encode(v, NON_ALPHANUMERIC)))
        .collect::<Vec<_>>().join("&");
    // 3. 拼接 method\nhost\npath\nquery_string
    format!("{}\n{}\n{}\n{}", method, host, path, qs)
}

/// 工具:UTC时间戳(精确到秒,符合火币要求)
pub fn utc_now() -> String {
    use chrono::Utc;
    Utc::now().format("%Y-%m-%dT%H:%M:%S").to_string()
}