blob: 6fc97e9ac3529c429fb2727a6f870b1002e2ab60 [file] [log] [blame] [edit]
use std::env;
use std::io::{self, Write};
use std::process;
fn main() {
let bytes = match env::args().nth(1) {
None => {
writeln!(&mut io::stderr(), "Usage: compress-escaped string")
.unwrap();
process::exit(1);
}
Some(arg) => arg.into_bytes(),
};
let compressed = frame_press(&bytes);
println!("{}", escape(&compressed));
println!("{}", escape(&frame_depress(&compressed)));
}
fn frame_press(bytes: &[u8]) -> Vec<u8> {
use snap::write;
let mut wtr = write::FrameEncoder::new(vec![]);
wtr.write_all(bytes).unwrap();
wtr.into_inner().unwrap()
}
fn frame_depress(bytes: &[u8]) -> Vec<u8> {
use snap::read;
use std::io::Read;
let mut buf = vec![];
read::FrameDecoder::new(bytes).read_to_end(&mut buf).unwrap();
buf
}
fn escape(bytes: &[u8]) -> String {
use std::ascii::escape_default;
bytes.iter().flat_map(|&b| escape_default(b)).map(|b| b as char).collect()
}