clap_flags 0.1.0

Collection of reusable flags for Clap
Documentation

clap_flags

crates.io version build status downloads docs.rs docs

Collection of reusable flags for Clap.

Usage

extern crate clap_flags;
#[macro_use]
extern crate structopt;
#[macro_use]
extern crate log;
extern crate futures;
extern crate hyper;
extern crate tokio;

use futures::prelude::*;
use hyper::service::service_fn_ok;
use hyper::{Body, Response, Server};
use structopt::StructOpt;

#[derive(Debug, StructOpt)]
struct Cli {
  #[structopt(flatten)]
  verbose: clap_flags::Verbosity,
  #[structopt(flatten)]
  log: clap_flags::Log,
  #[structopt(flatten)]
  port: clap_flags::Port,
}

fn main() -> Result<(), Box<std::error::Error>> {
  let args = Cli::from_args();
  let listener = args.port.bind()?;

  args.log.log_all(args.verbose.log_level())?;

  let handle = tokio::reactor::Handle::current();
  let listener = tokio::net::TcpListener::from_std(listener, &handle)?;
  let addr = listener.local_addr()?;

  let server = Server::builder(listener.incoming())
    .serve(|| service_fn_ok(|_| Response::new(Body::from("Hello World"))))
    .map_err(|e| eprintln!("server error: {}", e));

  info!("Server listening on {}", addr);
  tokio::run(server);

  Ok(())
}

Output

clap_flags 0.1.0
Yoshua Wuyts <yoshuawuyts@gmail.com>
Collection of reusable flags for Clap

USAGE:
    main [FLAGS] [OPTIONS]

FLAGS:
    -h, --help         Prints help information
    -P, --pretty       Enable pretty printing.
    -V, --version      Prints version information
    -v, --verbosity    Pass many times for more log output

OPTIONS:
    -a, --address <address>    The network address to listen to. [default: 127.0.0.1]
        --listen-fd <fd>       A previously opened network socket. [env: LISTEN_FD=]
    -p, --port <port>          The network port to listen to. [env: PORT=]

Installation

$ cargo add clap_flags

License

MIT OR Apache-2.0