use std::io::Write;
use std::path::PathBuf;
use std::{fs, io};
use bytes::Bytes;
use fs_extra::dir::CopyOptions;
use rust_embed::RustEmbed;
#[derive(RustEmbed)]
#[folder = "resources/bundle/"]
struct Asset;
pub(crate) fn setup(dir: PathBuf, repository: String) -> anyhow::Result<()> {
let mut temp_file = tempfile::tempfile()?;
let temp_dir = tempfile::tempdir()?;
let res: Bytes = reqwest::blocking::get(repository)?.bytes()?;
temp_file.write_all(&res)?;
let mut z = zip::ZipArchive::new(temp_file)?;
z.extract(temp_dir.path())?;
let from_dir = fs::read_dir(temp_dir.path())?
.find(|e| {
e.as_ref()
.map(|e| Ok::<bool, io::Error>(e.metadata()?.is_dir()))
.is_ok()
})
.unwrap()?;
let mut opts = CopyOptions::new();
opts.content_only = true;
fs_extra::dir::copy(from_dir.path(), dir, &opts)?;
Ok(())
}
#[cfg(test)]
mod tests {
}