carnix 0.10.3

Generate Nix expressions from Cargo.lock files (in order to use Nix as a build system for crates).
#[macro_use]
extern crate clap;
extern crate env_logger;
extern crate itertools;
#[macro_use]
extern crate log;
#[macro_use]
extern crate nom;
extern crate regex;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate dirs;
extern crate failure;
extern crate serde_json;
extern crate tempdir;
extern crate toml;
extern crate url;
#[macro_use]
extern crate failure_derive;

use clap::{App, Arg, SubCommand};
use std::io::BufWriter;
use std::process::Command;

mod error;
pub use error::*;
mod cache;
mod cfg;
mod krate;
mod output;
mod prefetch;

fn main() {
    env_logger::init();
    let version = crate_version!();
    let matches = App::new("cargo-generate-nixfile")
        .version(version)
        .author("pmeunier <pe@pijul.org>")
        .about("Generate a nix derivation set from a cargo registry")
        .after_help("Example compilation:\n  $ cargo generate-nixfile --src ./. --standalone\n  $ nix-build -E \"(import ./Cargo.nix).__all\"")
        .subcommand(SubCommand::with_name("generate-nixfile")
                    .arg(
                        Arg::with_name("src")
                            .long("--src")
                            .help("Source of the main project, the default is to fetch from crates.io.")
                            .takes_value(true),
                    )
                    .arg(
                        Arg::with_name("standalone")
                            .long("--standalone")
                            .help("Produce a standalone file, which can be built directly with nix-build."),
                    )
        )
        .get_matches();
    if let Some(matches) = matches.subcommand_matches("generate-nixfile") {
        Command::new("cargo")
            .args(&["generate-lockfile"])
            .status()
            .unwrap();
        let cargo_lock = krate::find_cargo_lock().unwrap();
        let mut cargo_nix = cargo_lock.clone();
        cargo_nix.set_extension("nix");
        let mut nix_file = BufWriter::new(std::fs::File::create(&cargo_nix).unwrap());
        if let Err(e) = output::generate_nix(
            &cargo_lock,
            matches.is_present("standalone"),
            matches.value_of("src"),
            &mut nix_file,
        ) {
            eprintln!("{}", e);
            std::process::exit(1)
        }
    }
}