use std::fs;
use std::io::{Cursor, Read};
use std::path::PathBuf;
use reqwest::blocking;
use sha2::{Digest, Sha256};
use zip::ZipArchive;
const URL: &str = "https://repo1.maven.org/maven2/org/khronos/openxr/openxr_loader_for_android/1.1.52/openxr_loader_for_android-1.1.52.aar";
const DIGEST: &str = "0d6ea1fd6720cffde5b1692ed770ad74b856cacb71e3b1c235cbe7688d1cd6f6";
const ARCH: &str = "arm64-v8a";
const LIB: &str = "libopenxr_loader.so";
fn main() {
let buf = blocking::get(URL).unwrap_or_else(|e| panic!("Unable to fetch {}: {}", URL, e)).bytes().unwrap();
let calc_digest = Sha256::digest(&buf);
let exp_digest: Box<[u8]> = (0..DIGEST.len()).step_by(2).map(|i| u8::from_str_radix(&DIGEST[i..i + 2], 16).unwrap()).collect();
if *calc_digest != *exp_digest {
panic!("Digest mismatch");
}
let reader = Cursor::new(buf);
let mut zip = ZipArchive::new(reader).unwrap();
let mut file = zip.by_path(format!("jni/{}/{}", ARCH, LIB)).unwrap();
let mut buf = Vec::new();
file.read_to_end(&mut buf).unwrap();
let mut path = PathBuf::from("lib");
path.push(ARCH);
fs::create_dir_all(&path).unwrap();
path.push(LIB);
fs::write(path, buf).unwrap();
}