swagger-ui 0.1.2

Swagger-ui for rust applications
extern crate reqwest;

use std::io::Write;
use std::fs::File;
use std::fs::remove_file;
use std::env;
use flate2::read::GzDecoder;
use tar::Archive;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    println!("cargo:rerun-if-changed=build.rs");

    let swagger_ui_version = "3.45.1";
    let target =
        format!(
            "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-{}.tgz",
            swagger_ui_version
        );

    let resp = reqwest::get(&target).await.unwrap();

    let dist = env::var("OUT_DIR").unwrap() + "/swagger-ui-dist.tgz";
    let mut out = File::create(&dist).expect("failed to create file");
    out.write_all(&*(resp.bytes().await.unwrap())).unwrap();

    let dist = File::open(dist).unwrap();
    let dist = GzDecoder::new(dist);
    let mut dist = Archive::new(dist);
    let unpack_path = env::var("OUT_DIR").unwrap() + "/swagger-ui-dist/";
    dist.unpack(&unpack_path).unwrap();
    let dist = unpack_path + "/package";

    let trash = [
        "absolute-path.js",
        "index.js",
        "package.json",
        "README.md",
        "swagger-ui.css.map",
        "swagger-ui.js.map",
        "swagger-ui-bundle.js.map",
        "swagger-ui-es-bundle.js.map",
        "swagger-ui-es-bundle-core.js.map",
        "swagger-ui-standalone-preset.js.map",
        "swagger-ui-es-bundle.js",
        "swagger-ui-es-bundle-core.js"
    ];

    for file in &trash {
        remove_file(format!("{}/{}", dist, file)).unwrap();
    }

    println!("cargo:rustc-env=SWAGGER_UI_DIST_PATH={}", dist);

    Ok(())
}