utoipa-swagger-ui 0.1.0-rc1

Swagger UI for utoipa
Documentation
use std::{
    env::{self, VarError},
    process::Command,
};

const SWAGGER_UI_DIST_ZIP: &str = "swagger-ui-4.6.1";

fn main() {
    println!("cargo:rerun-if-changed=res/{}.zip", SWAGGER_UI_DIST_ZIP);
    println!(
        "cargo:rustc-env=UTOIPA_SWAGGER_UI_VERSION={}",
        SWAGGER_UI_DIST_ZIP
    );

    let target_dir = env::var("CARGO_TARGET_DIR")
        .or_else(|_| env::var("CARGO_BUILD_TARGET_DIR"))
        .or_else(|_| -> Result<String, VarError> {
            let manifest_dir = env::var("CARGO_MANIFEST_DIR")?;
            if manifest_dir.contains("/package") {
                Ok("target".to_string())
            } else {
                Ok("../target".to_string())
            }
        })
        .unwrap();
    println!("cargo:rustc-env=UTOIPA_SWAGGER_DIR={}", &target_dir);

    Command::new("unzip")
        .arg(&format!("res/{}.zip", SWAGGER_UI_DIST_ZIP))
        .arg(&format!("{}/dist/**", SWAGGER_UI_DIST_ZIP))
        .args(&["-d", &target_dir])
        .status()
        .unwrap();

    Command::new("sed")
        .args(&[
            "-i",
            r#"s|url: ".*",|{{urls}},|"#,
            &format!("target/{}/dist/index.html", SWAGGER_UI_DIST_ZIP),
        ])
        .status()
        .unwrap();
}