use std::ffi::OsString; use std::path::PathBuf; //------------------------------------------ pub fn cpp_cmd(cmd: S, args: I) -> duct::Expression where S: Into, I: IntoIterator, I::Item: Into, { let mut bin = PathBuf::from("./bin"); bin.push(Into::::into(cmd)); duct::cmd(bin.as_path(), args) } pub fn rust_cmd(cmd: S, args: I) -> duct::Expression where S: Into, I: IntoIterator, I::Item: Into, { const RUST_PATH: &str = env!(concat!("CARGO_BIN_EXE_", "pdata_tools")); let mut all_args = vec![Into::::into(cmd)]; for a in args { all_args.push(Into::::into(a)); } duct::cmd(RUST_PATH, &all_args) } pub fn thin_check_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("thin_check", args) } pub fn thin_rmap_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { cpp_cmd("thin_rmap", args) } pub fn thin_generate_metadata_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { cpp_cmd("thin_generate_metadata", args) } pub fn thin_generate_mappings_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { cpp_cmd("thin_generate_mappings", args) } pub fn thin_generate_damage_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { cpp_cmd("thin_generate_damage", args) } pub fn thin_restore_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("thin_restore", args) } pub fn thin_repair_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("thin_restore", args) } pub fn thin_dump_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("thin_dump", args) } pub fn thin_delta_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { cpp_cmd("thin_delta", args) } pub fn thin_metadata_pack_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("thin_metadata_pack", args) } pub fn thin_metadata_unpack_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("thin_metadata_unpack", args) } pub fn cache_check_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("cache_check", args) } pub fn cache_dump_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("cache_dump", args) } pub fn cache_restore_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("cache_restore", args) } pub fn cache_repair_cmd(args: I) -> duct::Expression where I: IntoIterator, I::Item: Into, { rust_cmd("cache_repair", args) } //------------------------------------------ pub mod msg { pub const FILE_NOT_FOUND: &str = "Couldn't find input file"; pub const MISSING_INPUT_ARG: &str = "The following required arguments were not provided"; // TODO: be specific pub const MISSING_OUTPUT_ARG: &str = "The following required arguments were not provided"; // TODO: be specific pub const BAD_SUPERBLOCK: &str = "bad checksum in superblock"; pub fn bad_option_hint(option: &str) -> String { format!("Found argument '{}' which wasn't expected", option) } } //------------------------------------------