Files

1 line
1.8 KiB
JSON

{"repo": "137-trimethylxanthin/deeptui", "files": {"src/api.rs": {"0d8600ce046aa8268d58736838b2ffd05597d626": {"t": 1785746256.4646418, "n": 1566, "h": "f9e4e07a6de0844a", "c": "use serde::Deserialize;\n\nconst DEEPSEEK_API_BASE: &str = \"https://api.deepseek.com\";\n\n#[derive(Debug, Clone, Deserialize)]\npub struct BalanceResponse {\n pub is_available: bool,\n pub balance_infos: Vec<BalanceInfo>,\n}\n\n#[derive(Debug, Clone, Deserialize)]\npub struct BalanceInfo {\n pub currency: String,\n pub total_balance: String,\n pub granted_balance: String,\n pub topped_up_balance: String,\n}\n\n#[derive(Debug, Clone)]\npub struct DeepSeekClient {\n api_key: String,\n client: reqwest::Client,\n}\n\nimpl DeepSeekClient {\n pub fn new(api_key: String) -> Self {\n let client = reqwest::Client::builder()\n .timeout(std::time::Duration::from_secs(10))\n .build()\n .expect(\"failed to build HTTP client\");\n\n Self { api_key, client }\n }\n\n pub async fn fetch_balance(&self) -> Result<BalanceResponse, anyhow::Error> {\n let url = format!(\"{}/user/balance\", DEEPSEEK_API_BASE);\n let resp = self\n .client\n .get(&url)\n .header(\"Authorization\", format!(\"Bearer {}\", self.api_key))\n .send()\n .await?;\n\n let status = resp.status();\n let body = resp.text().await?;\n\n if !status.is_success() {\n anyhow::bail!(\n \"API error ({}): {}\",\n status.as_u16(),\n body.trim()\n );\n }\n\n let balance: BalanceResponse = serde_json::from_str(&body)\n .map_err(|e| anyhow::anyhow!(\"failed to parse response: {e}\"))?;\n\n Ok(balance)\n }\n}\n"}}}}