fast_down_cli/
lib.rs

1use color_eyre::eyre::{eyre, Result};
2use reqwest::header::{HeaderMap, HeaderName, HeaderValue};
3use sha2::{Digest, Sha256};
4use std::{
5    fs::File,
6    io::{self, BufReader, Read},
7    str::FromStr,
8};
9
10pub fn sha256_file(file_path: &str) -> io::Result<String> {
11    let file = File::open(file_path)?;
12    let mut reader = BufReader::new(file);
13    let mut hasher = Sha256::new();
14    let mut buffer = [0u8; 8192];
15    loop {
16        let bytes_read = reader.read(&mut buffer)?;
17        if bytes_read == 0 {
18            break;
19        }
20        hasher.update(&buffer[..bytes_read]);
21    }
22    Ok(format!("{:x}", hasher.finalize()))
23}
24
25pub fn build_headers(headers: &[String]) -> Result<HeaderMap> {
26    let mut header_map = HeaderMap::with_capacity(headers.len());
27    for header in headers {
28        let parts: Vec<&str> = header.splitn(2, ':').map(|t| t.trim()).collect();
29        if parts.len() != 2 {
30            return Err(eyre!("Header格式应为 'Key: Value'"));
31        }
32        let key = parts[0];
33        let value = parts[1];
34        header_map.insert(HeaderName::from_str(key)?, HeaderValue::from_str(value)?);
35    }
36    Ok(header_map)
37}