Files
wasmtime/cranelift/serde/src/clif-json.rs
Alex Crichton 5fe06f7345 Update to clap 3.* (#4082)
* 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.
2022-04-28 12:47:12 -05:00

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);
}
}