use weex_rust_sdk::WeexClient;
use weex_rust_sdk::types::{Side, OrderType};
use rust_decimal::Decimal;
use std::str::FromStr;
#[tokio::main]
async fn main() {
println!("=== WEEX Rust SDK - Full Feature Test ===\n");
let api_key = std::env::var("WEEX_API_KEY")
.expect("WEEX_API_KEY environment variable required");
let secret = std::env::var("WEEX_SECRET_KEY")
.expect("WEEX_SECRET_KEY environment variable required");
let passphrase = std::env::var("WEEX_PASSPHRASE")
.expect("WEEX_PASSPHRASE environment variable required");
let client = WeexClient::builder()
.base_url("https://api-contract.weex.com")
.api_key(api_key)
.secret_key(secret)
.passphrase(passphrase)
.build()
.expect("Failed to build client");
let symbol = "cmt_btcusdt";
println!("📊 MARKET DATA");
print!(" get_ticker()... ");
match client.get_ticker(symbol).await {
Ok(t) => println!("✅ {} = ${}", t.symbol, t.last),
Err(e) => println!("❌ {:?}", e),
}
print!(" get_klines()... ");
match client.get_klines(symbol, "1h", 5).await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
print!(" get_depth()... ");
match client.get_depth(symbol, None).await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
print!(" get_funding_rate()... ");
match client.get_funding_rate(symbol).await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
println!("\n🔐 ACCOUNT (Authenticated)");
print!(" get_balance()... ");
match client.get_balance().await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
print!(" get_position()... ");
match client.get_position(symbol).await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
print!(" get_open_orders()... ");
match client.get_open_orders(symbol).await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
println!("\n⚙️ TRADING CONFIG");
print!(" set_leverage()... ");
match client.set_leverage(symbol, 10, Side::Buy).await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
print!(" set_margin_mode()... ");
match client.set_margin_mode(symbol, "crossed").await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("❌ {:?}", e),
}
println!("\n📝 ORDER PLACEMENT (may fail if no balance)");
print!(" place_futures_order()... ");
match client.place_futures_order(
symbol,
"0.001",
Side::Buy,
OrderType::Limit,
Some("50000"),
Some(&format!("test_{}", chrono::Utc::now().timestamp())),
).await {
Ok(resp) => println!("✅ Response: {} bytes", resp.len()),
Err(e) => println!("⚠️ {:?}", e),
}
print!(" cancel_order()... ");
match client.cancel_order(symbol, "fake_order_id").await {
Ok(data) => println!("✅ Got {} bytes", data.len()),
Err(e) => println!("⚠️ {:?}", e),
}
println!("\n=== Tests Complete ===");
}