use env_logger;
use log::debug;
use reqwest;
use serde_json;
use structopt::StructOpt;
macro_rules! println {
($fmt:expr, $($args:tt)*) => {
{
use std::io::{stdout, Write};
use std::process::exit;
if writeln!(&mut stdout(), $fmt, $($args)*).is_err() {
exit(1);
}
}
}
}
mod boards;
mod posts;
mod threads;
mod download;
use self::boards::list_boards;
use self::posts::list_posts;
use self::threads::list_threads;
use self::download::download;
#[derive(StructOpt, Debug)]
struct Cli {
board: Option<String>,
thread: Option<usize>,
#[structopt(short = "w", long = "comment-width", default_value = "80")]
comment_width: usize,
#[structopt(long = "base-url", default_value = "https://2ch.hk")]
base_url: String,
#[structopt(long = "download")]
download: Option<String>,
}
fn main() {
env_logger::init();
let args = Cli::from_args();
debug!("Got args: {:#?}", &args);
if let Some(path) = args.download {
download(&args.base_url, &path);
return
}
match (args.board, args.thread) {
(None, None) => list_boards(),
(Some(board), None) => list_threads(&board, args.comment_width),
(Some(board), Some(thread)) => list_posts(&board, thread, args.comment_width),
_ => Cli::clap().print_help().expect("Cannot print help"),
}
}