mirror of
https://github.com/edera-dev/sprout.git
synced 2025-12-19 19:00:18 +00:00
58 lines
1.9 KiB
Rust
58 lines
1.9 KiB
Rust
|
|
use std::path::PathBuf;
|
||
|
|
use std::{env, fs};
|
||
|
|
|
||
|
|
/// The size of the sbat.csv file.
|
||
|
|
const SBAT_SIZE: usize = 512;
|
||
|
|
|
||
|
|
/// Generate the sbat.csv for the .sbat link section.
|
||
|
|
///
|
||
|
|
/// We intake a sbat.template.tsv and output a sbat.csv which is included by src/sbat.rs
|
||
|
|
fn generate_sbat_csv() {
|
||
|
|
// Notify Cargo that if the Sprout version changes, we need to regenerate the sbat.csv.
|
||
|
|
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
|
||
|
|
|
||
|
|
// The version of the sprout crate.
|
||
|
|
let sprout_version = env::var("CARGO_PKG_VERSION").expect("CARGO_PKG_VERSION not set");
|
||
|
|
|
||
|
|
// The output directory to place the sbat.csv into.
|
||
|
|
let output_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR not set"));
|
||
|
|
|
||
|
|
// The output path to the sbat.csv.
|
||
|
|
let output_file = output_dir.join("sbat.csv");
|
||
|
|
|
||
|
|
// The path to the root of the sprout crate.
|
||
|
|
let sprout_root =
|
||
|
|
PathBuf::from(env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"));
|
||
|
|
|
||
|
|
// The path to the sbat.template.tsv file is in the source directory of the sprout crate.
|
||
|
|
let template_path = sprout_root.join("src/sbat.template.csv");
|
||
|
|
|
||
|
|
// Read the sbat.csv template file.
|
||
|
|
let template = fs::read_to_string(&template_path).expect("unable to read template file");
|
||
|
|
|
||
|
|
// Replace the version placeholder in the template with the actual version.
|
||
|
|
let sbat = template.replace("{version}", &sprout_version);
|
||
|
|
|
||
|
|
// Encode the sbat.csv as bytes.
|
||
|
|
let mut encoded = sbat.as_bytes().to_vec();
|
||
|
|
|
||
|
|
if encoded.len() > SBAT_SIZE {
|
||
|
|
panic!("sbat.csv is too large");
|
||
|
|
}
|
||
|
|
|
||
|
|
// Pad the sbat.csv to the required size.
|
||
|
|
while encoded.len() < SBAT_SIZE {
|
||
|
|
encoded.push(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Write the sbat.csv to the output directory.
|
||
|
|
fs::write(&output_file, encoded).expect("unable to write sbat.csv");
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Build script entry point.
|
||
|
|
/// Right now, all we need to do is generate the sbat.csv file.
|
||
|
|
fn main() {
|
||
|
|
// Generate the sbat.csv file.
|
||
|
|
generate_sbat_csv();
|
||
|
|
}
|