#![allow(clippy::expect_used)]
#![allow(clippy::unwrap_used)]
use bashrs::models::{ShellDialect, VerificationLevel};
use bashrs::{Config, Transpiler};
fn main() -> bashrs::Result<()> {
println!("Custom Build Script - bashrs xtask integration");
println!("================================================\n");
println!("1. Basic hook transpilation:");
basic_transpilation()?;
println!("\n2. Transpilation with custom config:");
custom_config_transpilation()?;
println!("\n3. Batch transpilation:");
batch_transpilation()?;
println!("\n✓ All examples completed successfully!");
Ok(())
}
fn basic_transpilation() -> bashrs::Result<()> {
use std::io::Write;
use tempfile::NamedTempFile;
let mut input_file = NamedTempFile::new().unwrap();
write!(
input_file,
"fn main() {{ let x = 42; echo(\"Hello\"); }} fn echo(s: &str) {{}}"
)
.unwrap();
Transpiler::new()
.input(input_file.path())
.output("target/examples/pre-commit")
.permissions(0o755)
.transpile()?;
println!(" ✓ Transpiled pre-commit hook");
Ok(())
}
fn custom_config_transpilation() -> bashrs::Result<()> {
use std::io::Write;
use tempfile::NamedTempFile;
let config = Config {
target: ShellDialect::Posix,
verify: VerificationLevel::Strict,
optimize: true,
emit_proof: false,
validation_level: None,
strict_mode: true,
};
let mut input_file = NamedTempFile::new().unwrap();
write!(
input_file,
"fn main() {{ let x = 42; echo(\"Hello\"); }} fn echo(s: &str) {{}}"
)
.unwrap();
Transpiler::new()
.input(input_file.path())
.output("target/examples/pre-commit-strict")
.permissions(0o755)
.config(config)
.transpile()?;
println!(" ✓ Transpiled with strict verification");
Ok(())
}
fn batch_transpilation() -> bashrs::Result<()> {
use std::io::Write;
use tempfile::NamedTempFile;
let mut files = Vec::new();
for i in 1..=3 {
let mut file = NamedTempFile::new().unwrap();
write!(file, "fn main() {{ let x = {}; }} ", i).unwrap();
files.push(file);
}
let outputs = [
"target/examples/batch/hook1",
"target/examples/batch/hook2",
"target/examples/batch/hook3",
];
for (i, output) in outputs.iter().enumerate() {
print!(" Transpiling hook{} ... ", i + 1);
Transpiler::new()
.input(files[i].path())
.output(output)
.permissions(0o755)
.transpile()?;
println!("✓");
}
println!(" ✓ Batch transpilation complete");
Ok(())
}