archival 0.18.3

The simplest CMS in existence
Documentation
use super::BinaryCommand;
use crate::binary::command::{add_args, command_root, CommandConfig};
use crate::binary::dev_server::{self, DevServerMode, UploadsConfig};
use anyhow::Result;
use clap::{arg, value_parser, ArgMatches};
use std::sync::{atomic::AtomicBool, Arc};

pub struct Command {}
impl BinaryCommand for Command {
    fn name(&self) -> &str {
        "run"
    }
    fn cli(&self, cmd: clap::Command) -> clap::Command {
        add_args(
            cmd.about("auto-rebuild an archival site")
                .arg(
                    arg!(-p --port <port> "static server port")
                        .required(false)
                        .value_parser(value_parser!(u16)),
                )
                .arg(arg!(-n --noserve "disables the static server").required(false)),
            CommandConfig::archival_site(),
        )
    }
    fn handler(
        &self,
        args: &ArgMatches,
        quit: Arc<AtomicBool>,
    ) -> Result<crate::binary::ExitStatus> {
        let root_dir = command_root(args);
        let upload_prefix = args.get_one::<String>("upload-prefix").map(|s| s.as_str());
        let options = if !args.get_one::<bool>("noserve").unwrap() {
            DevServerMode::Serve(args.get_one::<u16>("port").copied())
        } else {
            DevServerMode::NoServe
        };
        dev_server::watch(
            root_dir,
            upload_prefix.map(UploadsConfig::prefix).unwrap_or_default(),
            options,
            None,
            None,
            quit,
        )
    }
}