cses-cli 0.1.3

CSES CLI is a lightweight tool for using CSES from the command line.
use std::io::Write;

use anyhow::{Context, Result};

use super::util::prompt_yes_no;
use super::Ui;
use crate::{service, Storage, RP};

pub fn login(ui: &mut Ui<impl RP>) -> Result<()> {
    (|| -> Result<_> {
        let overwrite_message = "Already logged in. Are you sure you want to overwrite the current login session? (yes/No) ";
        if service::login_is_valid(&ui.res)? && !prompt_yes_no(ui, overwrite_message)? {
            return Ok(());
        }

        let login_url = service::login(&mut ui.res)?;
        writeln!(
            ui.term,
            "Saving token to {}\n\nPlease visit\n{}\nto log in",
            ui.res.storage.get_path().display(),
            login_url
        )?;
        Ok(())
    })().context("Login failed!")
}

pub fn logout(ui: &mut Ui<impl RP>) -> Result<()> {
    service::logout(&mut ui.res)?;
    ui.term.write_line("Login invalidated successfully")?;
    Ok(())
}

pub fn status(ui: &mut Ui<impl RP>) -> Result<()> {
    let login_status = service::login_status(&ui.res)?;
    writeln!(ui.term, "Login status: {}", login_status)?;
    Ok(())
}