crowbar 0.4.10

Securily generates temporary AWS credentials through Identity Providers using SAML
Documentation
use std::{
    io::{stderr, stdout, Write},
    process,
};

pub fn print_causes(e: impl Into<anyhow::Error>, mut w: impl Write) {
    let e = e.into();
    let causes = e.chain().collect::<Vec<_>>();
    let num_causes = causes.len();
    for (index, cause) in causes.iter().enumerate() {
        if index == 0 {
            writeln!(w, "{}", cause).ok();
            if num_causes > 1 {
                writeln!(w, "Caused by: ").ok();
            }
        } else {
            writeln!(w, " {}: {}", num_causes - index, cause).ok();
        }
    }
}

pub fn ok_or_exit<T, E>(r: Result<T, E>) -> T
where
    E: Into<anyhow::Error>,
{
    match r {
        Ok(r) => r,
        Err(e) => {
            stdout().flush().ok();
            print_causes(e, stderr());
            process::exit(1);
        }
    }
}