markdown-peek 0.1.0

Markdown preview in browser and terminal
mod cli;
mod emitter;
mod server;
mod watcher;

use crate::cli::{Cli, Mode};
use crate::server::serve;
use anyhow::Result;
use std::path::PathBuf;
use tracing::{error, info};
use tracing_subscriber::EnvFilter;

fn main() -> Result<()> {
    let cmd = Cli::parse_with_color()?;
    let mode = cmd.resolve_mode()?;
    match mode {
        Mode::Serve { file, watch } => handle_serve(file),
        Mode::Term { file, watch } => unimplemented!(),
    }
    Ok(())
}

fn handle_serve(root: PathBuf) {
    tracing_subscriber::fmt()
        .with_env_filter(
            EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")),
        )
        .with_ansi(true)
        .without_time()
        .init();
    if root.exists() {
        serve(root);
    } else {
        error!("'{}' is not found.", root.display());
    }
}

fn handle_term(root: PathBuf) {
    if root.exists() {
        if root.is_file() {
            info!("watching file '{}'", root.display());
        } else {
            error!("'{}' is not file and directory.", root.display());
        }
    } else {
        error!("'{}' is not found.", root.display());
    }
}