#[macro_use] extern crate rust_util;

use std::path::Path;
use goblin::Object;

fn main() {
    let file = std::env::args().nth(1);
    match file {
        None => failure_and_exit!("Must assign a file"),
        Some(f) => {
            let path = Path::new(&f);
            let buff = std::fs::read(path).unwrap_or_else(|e| failure_and_exit!("Read file: {}, failed: {}", f, e));
            match Object::parse(&buff).unwrap_or_else(|e| failure_and_exit!("Read file: {}, failed: {}", f , e)) {
                Object::Elf(elf) => {
                    success!("Found elf file: {:?}", elf.header);
                }
                Object::PE(pe) => {
                    success!("Found PE file: {:?}", pe);
                }
                Object::Mach(mach) => {
                    success!("Found mach file: {:?}", mach);
                }
                Object::Archive(archive) => {
                    success!("Fund linux archive file: {:?}", archive);
                }
                Object::Unknown(magic) => {
                    failure!("Unknown file, magic: {}", magic);
                }
            }
        }
    }
}
