use std::fs;
use std::io::{Read, Write};
use std::path::Path;
const GCS_BASE_URL: &str = "https://storage.googleapis.com/tetra3rs-testvecs";
#[allow(dead_code)]
pub fn ensure_test_file(local_path: &str) -> String {
let path = Path::new(local_path);
if path.exists() {
return local_path.to_string();
}
if let Some(parent) = path.parent() {
fs::create_dir_all(parent)
.unwrap_or_else(|e| panic!("Failed to create directory {:?}: {}", parent, e));
}
let gcs_key = local_path.strip_prefix("data/").unwrap_or(local_path);
let url = format!("{}/{}", GCS_BASE_URL, gcs_key);
println!("Downloading {} ...", url);
let resp = ureq::get(&url)
.call()
.unwrap_or_else(|e| panic!("Failed to download {}: {}", url, e));
let mut reader = resp.into_body().into_reader();
let mut file =
fs::File::create(path).unwrap_or_else(|e| panic!("Failed to create {:?}: {}", path, e));
let mut buf = vec![0u8; 1024 * 1024]; loop {
let n = reader
.read(&mut buf)
.unwrap_or_else(|e| panic!("Failed to read response for {}: {}", url, e));
if n == 0 {
break;
}
file.write_all(&buf[..n])
.unwrap_or_else(|e| panic!("Failed to write {:?}: {}", path, e));
}
println!("Downloaded {} -> {}", url, local_path);
local_path.to_string()
}