|
|
@@ -1,6 +1,6 @@
|
|
|
-use std::io::Write;
|
|
|
+use std::{ffi::OsString, io::Write};
|
|
|
|
|
|
-use clap::Parser;
|
|
|
+use clap::{Parser};
|
|
|
use huffman::{cli, hufftree, storage};
|
|
|
|
|
|
fn main() -> Result<(), std::io::Error> {
|
|
|
@@ -10,6 +10,29 @@ fn main() -> Result<(), std::io::Error> {
|
|
|
let outputf = args.output_file;
|
|
|
let mode = args.mode;
|
|
|
|
|
|
+ let outputf = match outputf {
|
|
|
+ Some(name) => name,
|
|
|
+ None => {
|
|
|
+ match mode {
|
|
|
+ cli::Mode::X => {
|
|
|
+ let mut temp = inputf.clone().into_string().expect("Not a valid input file name.");
|
|
|
+ if temp.ends_with(".z") {
|
|
|
+ temp.pop();
|
|
|
+ temp.pop();
|
|
|
+ } else {
|
|
|
+ temp.push_str(".unhuffed");
|
|
|
+ }
|
|
|
+ OsString::from(temp)
|
|
|
+ },
|
|
|
+ cli::Mode::C => {
|
|
|
+ let mut temp = inputf.clone();
|
|
|
+ temp.push(".z");
|
|
|
+ temp
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
let working_directory = std::path::Path::new(".");
|
|
|
let inputf = working_directory.join(inputf);
|
|
|
|
|
|
@@ -17,7 +40,7 @@ fn main() -> Result<(), std::io::Error> {
|
|
|
let mut outputf = std::fs::File::create(outputf)?;
|
|
|
|
|
|
match mode {
|
|
|
- cli::Mode::Extract => {
|
|
|
+ cli::Mode::X => {
|
|
|
println!("Reading file...");
|
|
|
let inputf = std::fs::read(inputf)?;
|
|
|
println!("Done.");
|
|
|
@@ -31,7 +54,7 @@ fn main() -> Result<(), std::io::Error> {
|
|
|
println!("Stored!");
|
|
|
}
|
|
|
|
|
|
- cli::Mode::Compress => {
|
|
|
+ cli::Mode::C => {
|
|
|
println!("Reading file...");
|
|
|
let inputf = std::fs::read_to_string(inputf)?;
|
|
|
println!("Done.");
|