qiniu_cdn_manager/
prefetch.rs1use std::collections::HashMap;
3
4use serde::Deserialize;
5
6use crate::Client;
7
8use colored::Colorize;
9
10#[derive(Debug, Deserialize)]
11pub struct PrefetchResponse {
12 pub code: i32,
13 pub error: String,
14 #[serde(rename = "requestId")]
15 pub request_id: Option<String>,
16 #[serde(rename = "invalidUrls")]
17 pub invalid_urls: Option<Vec<String>>,
18 #[serde(rename = "quotaDay")]
19 pub quota_day: Option<i32>,
20 #[serde(rename = "surplusDay")]
21 pub surplus_day: Option<i32>,
22}
23
24impl Client {
25 pub async fn prefetch(&self, urls: &str) -> Result<PrefetchResponse, anyhow::Error> {
27 let url = format!("https://{}{}", self.host, "/v2/tune/prefetch");
28 let url_arr: Vec<&str> = urls.split(',').collect();
29 let mut data = HashMap::new();
30 data.insert("urls", url_arr);
31 let response = self
32 .do_request::<PrefetchResponse, HashMap<&str, Vec<&str>>>(
33 "POST",
34 &url,
35 None,
36 Some("application/json"),
37 Some(&data),
38 )
39 .await?;
40 Ok(response)
41 }
42
43 pub fn print_prefetch(self, response: PrefetchResponse) {
44 if response.code != 200 {
45 eprintln!(
46 "[ERR] code: {}, message: {}.",
47 response.code.to_string().red(),
48 response.error.red()
49 );
50 } else {
51 println!("{}", "文件预取成功 ✅".green());
52 }
53 if let Some(request_id) = response.request_id {
54 println!("{}: {}", "RequestId".green().bold(), request_id);
55 }
56 if let Some(invalid_urls) = response.invalid_urls {
57 println!("{}: ", "存在如下无效的 url".green().bold());
58 for invalid_url in invalid_urls {
59 println!("{}", invalid_url);
60 }
61 }
62 if let Some(quota_day) = response.quota_day {
63 println!("{}: {}", "每日预取限额".green().bold(), quota_day);
64 }
65 if let Some(surplus_day) = response.surplus_day {
66 println!("{}: {}", "当前剩余限额".green().bold(), surplus_day);
67 }
68 }
69}