slack-gc 1.0.1

A barebones utility for cleaning up old slack file uploads
extern crate chrono;
extern crate fern;
extern crate log;
extern crate structopt;

use structopt::StructOpt;

pub fn parse_args() -> CliOptions { CliOptions::from_args() }

#[derive(StructOpt, Debug)]
#[structopt()]
pub struct CliOptions {
    /// Output all log messages, super verbosely!
    #[structopt(short = "v", long = "verbose")]
    pub verbose: bool,

    /// Output fewer log messages, super not verbosely!
    #[structopt(short = "q", long = "quiet")]
    pub quiet: bool,

    /// The number of days of retention to leave in Slack
    #[structopt(short = "r", long = "retention-days", default_value = "14")]
    pub retention_days: u32,

    /// Actually do the deletion. We default to a dry run.
    #[structopt(short = "D", long = "delete")]
    pub issue_deletions: bool,

    /// Slack "Legacy" API token.
    /// Get yours from https://api.slack.com/custom-integrations/legacy-tokens
    #[structopt(raw(required = "true", min_values = "1"))]
    pub token: Vec<String>,
}

/// Set up a reasonable default log output formatter
pub fn setup_logger(level: log::LevelFilter) -> Result<(), fern::InitError> {
    fern::Dispatch::new()
        .format(move |out, message, record| {
            out.finish(format_args!(
                "{} [{}] [{}] {}",
                chrono::Local::now().format("%Y-%m-%d %H:%M:%S"),
                record.target(),
                record.level(),
                message
            ))
        })
        .level(level)
        .chain(::std::io::stdout())
        .apply()?;
    Ok(())
}