* Update to clap 3.0 This commit migrates all CLI commands internally used in this project from structopt/clap2 to clap 3. The intent here is to ensure that we're using maintained versions of the dependencies as structopt and clap 2 are less maintained nowadays. Most transitions were pretty straightforward and mostly dealing with structopt/clap3 differences. * Fix a number of `cargo deny` errors This commit fixes a few errors around duplicate dependencies which arose from the prior update to clap3. This also uses a new feature in `deny.toml`, `skip-tree`, which allows having a bit more targeted ignores for skips of duplicate version checks. This showed a few more locations in Wasmtime itself where we could update some dependencies.
102 lines
2.7 KiB
Rust
102 lines
2.7 KiB
Rust
//! Utility for `cranelift_serde`.
|
|
|
|
#![deny(
|
|
missing_docs,
|
|
trivial_numeric_casts,
|
|
unused_extern_crates,
|
|
unstable_features
|
|
)]
|
|
#![warn(unused_import_braces)]
|
|
#![cfg_attr(feature = "clippy", plugin(clippy(conf_file = "../../clippy.toml")))]
|
|
#![cfg_attr(feature = "cargo-clippy", allow(clippy::new_without_default))]
|
|
#![cfg_attr(
|
|
feature = "cargo-clippy",
|
|
warn(
|
|
clippy::float_arithmetic,
|
|
clippy::mut_mut,
|
|
clippy::nonminimal_bool,
|
|
clippy::map_unwrap_or,
|
|
clippy::clippy::unicode_not_nfc,
|
|
clippy::use_self
|
|
)
|
|
)]
|
|
|
|
use clap::Parser;
|
|
use cranelift_codegen::ir::Function;
|
|
use cranelift_reader::parse_functions;
|
|
use std::fs::File;
|
|
use std::io::prelude::*;
|
|
use std::io::{self, Write};
|
|
use std::process;
|
|
|
|
fn call_ser(file: &str, pretty: bool) -> Result<(), String> {
|
|
let ret_of_parse = parse_functions(file);
|
|
match ret_of_parse {
|
|
Ok(funcs) => {
|
|
let ser_str = if pretty {
|
|
serde_json::to_string_pretty(&funcs).unwrap()
|
|
} else {
|
|
serde_json::to_string(&funcs).unwrap()
|
|
};
|
|
println!("{}", ser_str);
|
|
Ok(())
|
|
}
|
|
Err(_pe) => Err("There was a parsing error".to_string()),
|
|
}
|
|
}
|
|
|
|
fn call_de(file: &File) -> Result<(), String> {
|
|
let de: Vec<Function> = match serde_json::from_reader(file) {
|
|
Result::Ok(val) => val,
|
|
Result::Err(err) => panic!("{}", err),
|
|
};
|
|
println!("{:?}", de);
|
|
Ok(())
|
|
}
|
|
|
|
/// Cranelift JSON serializer/deserializer utility
|
|
#[derive(Parser, Debug)]
|
|
#[clap(about)]
|
|
enum Args {
|
|
/// Serializes Cranelift IR into JSON
|
|
Serialize {
|
|
/// Generate pretty json
|
|
#[clap(long, short)]
|
|
pretty: bool,
|
|
|
|
/// Input file for serialization
|
|
file: String,
|
|
},
|
|
/// Deserializes Cranelift IR into JSON
|
|
Deserialize {
|
|
/// Input file for deserialization
|
|
file: String,
|
|
},
|
|
}
|
|
|
|
fn main() {
|
|
let res_serde = match Args::parse() {
|
|
Args::Serialize { pretty, file } => {
|
|
let mut contents = String::new();
|
|
let mut file = File::open(file).expect("Unable to open the file");
|
|
file.read_to_string(&mut contents)
|
|
.expect("Unable to read the file");
|
|
|
|
call_ser(&contents, pretty)
|
|
}
|
|
Args::Deserialize { file } => {
|
|
let file = File::open(file).expect("Unable to open the file");
|
|
call_de(&file)
|
|
}
|
|
};
|
|
|
|
if let Err(mut msg) = res_serde {
|
|
if !msg.ends_with('\n') {
|
|
msg.push('\n');
|
|
}
|
|
io::stdout().flush().expect("flushing stdout");
|
|
io::stderr().write_all(msg.as_bytes()).unwrap();
|
|
process::exit(1);
|
|
}
|
|
}
|