1 use crate::UNICODE_DIRECTORY;
2 use std::path::Path;
3 use std::process::Command;
4 
5 static URL_PREFIX: &str = "https://www.unicode.org/Public/UCD/latest/ucd/";
6 
7 static README: &str = "ReadMe.txt";
8 
9 static RESOURCES: &[&str] =
10     &["DerivedCoreProperties.txt", "PropList.txt", "UnicodeData.txt", "SpecialCasing.txt"];
11 
fetch_latest()12 pub fn fetch_latest() {
13     let directory = Path::new(UNICODE_DIRECTORY);
14     if directory.exists() {
15         eprintln!(
16             "Not refetching unicode data, already exists, please delete {:?} to regenerate",
17             directory
18         );
19         return;
20     }
21     if let Err(e) = std::fs::create_dir_all(directory) {
22         panic!("Failed to create {:?}: {}", UNICODE_DIRECTORY, e);
23     }
24     let output = Command::new("curl").arg(URL_PREFIX.to_owned() + README).output().unwrap();
25     if !output.status.success() {
26         panic!(
27             "Failed to run curl to fetch readme: stderr: {}",
28             String::from_utf8_lossy(&output.stderr)
29         );
30     }
31     let current = std::fs::read_to_string(directory.join(README)).unwrap_or_default();
32     if current.as_bytes() != &output.stdout[..] {
33         std::fs::write(directory.join(README), output.stdout).unwrap();
34     }
35 
36     for resource in RESOURCES {
37         let output = Command::new("curl").arg(URL_PREFIX.to_owned() + resource).output().unwrap();
38         if !output.status.success() {
39             panic!(
40                 "Failed to run curl to fetch {}: stderr: {}",
41                 resource,
42                 String::from_utf8_lossy(&output.stderr)
43             );
44         }
45         std::fs::write(directory.join(resource), output.stdout).unwrap();
46     }
47 }
48