use crate::cli::output::{print_success, print_warning};
use arboard::Clipboard;
use miette::Result;
#[allow(async_fn_in_trait)]
pub trait Authenticator {
async fn get_token(&self) -> Result<String>;
}
pub async fn execute_flow<A: Authenticator>(flow: &A) -> Result<()> {
let token = flow.get_token().await?;
match Clipboard::new() {
Ok(mut cb) => {
if let Err(e) = cb.set_text(token.clone()) {
print_warning(&format!("Failed to copy to clipboard: {}", e));
println!("Token: {}", token);
} else {
print_success("Token copied to clipboard!");
}
}
Err(_) => {
print_warning("Could not access clipboard.");
println!("Token: {}", token);
}
}
Ok(())
}