lemna 0.4.0

A Reactive UI framework for Rust
use std::error::Error;
use std::path::Path;

use glob::glob;


fn main() -> Result<(), Box<dyn Error>> {
    if cfg!(feature = "docs_rs") {
        println!("Skipping build because we're running on docs.rs");
        return Ok(());
    }
    let compiler = shaderc::Compiler::new().unwrap();
    let path = Path::new("./src/render/wgpu/pipelines/shaders");

    for entry in glob(&format!("{}/*.[vf][er][ra][tg]", path.display())).unwrap() {
        if let Ok(file_path) = entry {
            println!(
                "cargo:rerun-if-changed={}",
                file_path.canonicalize().unwrap().display()
            );
        }
    }

    for entry in glob(&format!("{}/*.[vf][er][ra][tg]", path.display())).unwrap() {
        if let Ok(file_path) = entry {
            let shader = std::fs::read_to_string(&file_path).unwrap();
            let shader_type = if file_path.extension().unwrap() == "vert" {
                shaderc::ShaderKind::Vertex
            } else {
                shaderc::ShaderKind::Fragment
            };
            let spv = compiler
                .compile_into_spirv(
                    &shader,
                    shader_type,
                    file_path.to_str().unwrap(),
                    "main",
                    None,
                )
                .unwrap();
            let mut out_file =
                std::fs::File::create(format!("{}.spv", file_path.display())).unwrap();
            std::io::copy(&mut spv.as_binary_u8(), &mut out_file).unwrap();
        }
    }

    Ok(())
}