webmetro/src/main.rs

62 lines
1.6 KiB
Rust
Raw Normal View History

2018-04-11 05:39:28 +00:00
#[macro_use] extern crate clap;
extern crate futures;
extern crate hyper;
extern crate tokio;
extern crate tokio_core;
extern crate tokio_io;
2018-04-11 05:39:28 +00:00
extern crate webmetro;
mod commands;
use clap::{App, AppSettings};
use futures::prelude::*;
use tokio_core::reactor::Core;
use webmetro::error::WebmetroError;
use commands::{
relay,
2018-04-12 06:03:46 +00:00
filter,
dump
};
2018-04-11 05:50:18 +00:00
fn options() -> App<'static, 'static> {
App::new("webmetro")
.version(crate_version!())
.about("Utilities for broadcasting & relaying live WebM video/audio streams")
.setting(AppSettings::VersionlessSubcommands)
2018-04-11 05:50:18 +00:00
.subcommand(relay::options())
2018-04-12 06:03:46 +00:00
.subcommand(filter::options())
.subcommand(dump::options())
2018-04-11 05:50:18 +00:00
}
fn main() {
let args = options().get_matches();
let core = Core::new().unwrap();
let handle = core.handle();
tokio_run(core, match args.subcommand() {
("filter", Some(sub_args)) => box_up(filter::run(sub_args)),
("relay", Some(sub_args)) => box_up(relay::run(sub_args)),
("dump", Some(sub_args)) => box_up(dump::run(sub_args)),
_ => box_up(futures::lazy(|| {
2018-04-11 05:50:18 +00:00
options().print_help().unwrap();
2018-04-11 23:45:02 +00:00
println!("");
Ok(())
}))
2018-04-14 22:44:09 +00:00
});
}
fn tokio_run(mut core: Core, task: Box<Future<Item=(), Error=WebmetroError>>) {
core.run(task.into_future()).unwrap_or_else(|err| {
eprintln!("Error: {}", err);
::std::process::exit(1);
});
}
fn box_up<F: IntoFuture<Item=(), Error=WebmetroError>>(task: F) -> Box<Future<Item=(), Error=WebmetroError>>
where F::Future: 'static
{
Box::new(task.into_future())
}