Path: blob/main/cranelift/isle/islec/src/main.rs
1692 views
use clap::Parser;1use cranelift_isle::compile;2use cranelift_isle::error::Errors;3use std::{4fs,5io::{self, Write},6path::PathBuf,7};89#[derive(Parser)]10struct Opts {11/// The output file to write the generated Rust code to. `stdout` is used if12/// this is not given.13#[arg(short, long)]14output: Option<PathBuf>,1516/// The input ISLE DSL source files.17#[arg(required = true)]18inputs: Vec<PathBuf>,19}2021fn main() -> Result<(), Errors> {22let _ = env_logger::try_init();2324let opts = Opts::parse();25let code = compile::from_files(opts.inputs, &Default::default())?;2627let stdout = io::stdout();28let (mut output, output_name): (Box<dyn Write>, _) = match &opts.output {29Some(f) => {30let output =31Box::new(fs::File::create(f).map_err(|e| {32Errors::from_io(e, format!("failed to create '{}'", f.display()))33})?);34(output, f.display().to_string())35}36None => {37let output = Box::new(stdout.lock());38(output, "<stdout>".to_string())39}40};4142output43.write_all(code.as_bytes())44.map_err(|e| Errors::from_io(e, format!("failed to write to '{output_name}'")))?;4546Ok(())47}484950