use std::{io::Write,path::{Path, PathBuf},};use anyhow::Context;#[derive(Copy, Clone)]pub struct Paths<'a> {statics_in_dir: &'a Path,statics_out_dir: &'a Path,}fn main() {if let Err(e) = run() {eprintln!("An error occurred within the rgit build script:\n\n{:?}", e);std::process::exit(1);}}fn run() -> anyhow::Result<()> {let manifest_dir =PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").context("CARGO_MANIFEST_DIR not set")?);let statics_in_dir = manifest_dir.join("statics");let out_dir = PathBuf::from(std::env::var("OUT_DIR").context("OUT_DIR not set by rustc")?);let statics_out_dir = out_dir.join("statics");let paths = Paths {statics_in_dir: &statics_in_dir,statics_out_dir: &statics_out_dir,};build_scss(paths).context("Failed to build CSS stylesheets")?;Ok(())}fn build_scss(paths: Paths) -> anyhow::Result<()> {let in_dir = paths.statics_in_dir.join("sass");let out_dir = paths.statics_out_dir.join("css");std::fs::create_dir_all(&out_dir).context("Failed to create output directory")?;println!("cargo:rerun-if-changed={}", in_dir.display());let input_file = in_dir.join("style.scss");let output_file = out_dir.join("style.css");let format = rsass::output::Format {style: rsass::output::Style::Compressed,..rsass::output::Format::default()};let output_content =rsass::compile_scss_path(&input_file, format).context("Failed to compile SASS")?;let mut output_file = std::fs::OpenOptions::new().write(true).create(true).truncate(true).open(output_file).context("Failed to open output file")?;output_file.write_all(&output_content).context("Failed to write compiled CSS to output")?;Ok(())}