pmis 1.0.1

Companion CLI tool for paste.misterio.me
Documentation
use crate::{Client, Paste, Result, Url, Uuid};

use anyhow::anyhow;
use atty::Stream;
use bat::{Input, PagingMode, PrettyPrinter};
use chrono_humanize::HumanTime;
use reqwest::StatusCode;

pub async fn download(api: Url, id: Uuid, raw: bool) -> Result<()> {
    let client = Client::new();

    let url = api.join(&format!("/p/{}", id))?;
    let res = client.get(url).send().await?;

    if res.status() == StatusCode::NOT_FOUND {
        return Err(anyhow!("The requested paste does not exist"));
    }

    let paste: Paste = res.error_for_status()?.json().await?;

    if !raw && atty::is(Stream::Stdout) {
        let title = paste.title.as_deref().unwrap_or("Untitled");
        let creator = paste.creator;
        let time = HumanTime::from(paste.creation);
        let visibility = if paste.unlisted { "Unlisted" } else { "Public" };

        PrettyPrinter::new()
            .input(
                Input::from_bytes(paste.content.as_bytes())
                    .name(title)
                    .title(format!(
                        "{} // by u/{}, {} - {}",
                        title, creator, time, visibility
                    )),
            )
            .line_numbers(true)
            .header(true)
            .grid(true)
            .paging_mode(PagingMode::QuitIfOneScreen)
            .theme("base16")
            .print()?;
    } else {
        println!("{}", paste.content.replace("\r", ""));
    }

    Ok(())
}