qiniu_cdn_manager/
prefetch.rs

1//! 文件预取
2use 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    /// ### [预取](https://developer.qiniu.com/fusion/1227/file-prefetching#3)
26    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}