Skip to content
775 changes: 563 additions & 212 deletions src/auth/flow.rs

Large diffs are not rendered by default.

1,028 changes: 2 additions & 1,026 deletions src/auth/mod.rs

Large diffs are not rendered by default.

664 changes: 664 additions & 0 deletions src/auth/tests.rs

Large diffs are not rendered by default.

1,320 changes: 0 additions & 1,320 deletions src/cli_output.rs

This file was deleted.

384 changes: 384 additions & 0 deletions src/cli_output/errors.rs

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions src/cli_output/human.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
use anyhow::Error as AnyhowError;

pub(crate) fn print_human_failure(error: &AnyhowError) {
eprintln!("{error:#}");
}
54 changes: 54 additions & 0 deletions src/cli_output/json.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
use super::errors::JsonErrorBody;
use anyhow::Result;
use serde::Serialize;
use std::io::Write;

#[derive(Debug, Serialize)]
pub(super) struct JsonSuccessEnvelope<'a, T> {
success: bool,
data: &'a T,
}

#[derive(Debug, Serialize)]
pub(super) struct JsonFailureEnvelope<'a> {
success: bool,
error: &'a JsonErrorBody,
}

pub(crate) fn print_json_success<T: Serialize>(data: &T) -> Result<()> {
let stdout = std::io::stdout();
let mut stdout = stdout.lock();
write_json_success(&mut stdout, data)
}

pub(crate) fn print_json_failure(error: &JsonErrorBody) -> Result<()> {
let stdout = std::io::stdout();
let mut stdout = stdout.lock();
write_json_failure(&mut stdout, error)
}

pub(crate) fn write_json_success<W: Write, T: Serialize>(writer: &mut W, data: &T) -> Result<()> {
serde_json::to_writer_pretty(&mut *writer, &json_success_value(data))?;
writeln!(writer)?;
Ok(())
}

fn write_json_failure<W: Write>(writer: &mut W, error: &JsonErrorBody) -> Result<()> {
serde_json::to_writer_pretty(&mut *writer, &json_failure_value(error))?;
writeln!(writer)?;
Ok(())
}

pub(super) fn json_success_value<T: Serialize>(data: &T) -> JsonSuccessEnvelope<'_, T> {
JsonSuccessEnvelope {
success: true,
data,
}
}

pub(super) fn json_failure_value(error: &JsonErrorBody) -> JsonFailureEnvelope<'_> {
JsonFailureEnvelope {
success: false,
error,
}
}
10 changes: 10 additions & 0 deletions src/cli_output/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
mod errors;
mod human;
mod json;

pub(crate) use errors::{describe_error, exit_code};
pub(crate) use human::print_human_failure;
pub(crate) use json::{print_json_failure, print_json_success, write_json_success};

#[cfg(test)]
mod tests;
Loading