kpcli: reorg subcommands
This commit is contained in:
68
kpcli/src/client/mod.rs
Normal file
68
kpcli/src/client/mod.rs
Normal file
@@ -0,0 +1,68 @@
|
||||
use kordophone::APIInterface;
|
||||
use kordophone::api::http_client::HTTPAPIClient;
|
||||
use kordophone::api::http_client::Credentials;
|
||||
|
||||
use dotenv;
|
||||
use clap::Subcommand;
|
||||
use crate::printers::ConversationPrinter;
|
||||
|
||||
#[derive(Subcommand)]
|
||||
pub enum Commands {
|
||||
/// Prints all known conversations on the server.
|
||||
Conversations,
|
||||
|
||||
/// Prints the server Kordophone version.
|
||||
Version,
|
||||
}
|
||||
|
||||
impl Commands {
|
||||
pub async fn run(cmd: Commands) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut client = ClientCli::new();
|
||||
match cmd {
|
||||
Commands::Version => client.print_version().await,
|
||||
Commands::Conversations => client.print_conversations().await,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ClientCli {
|
||||
api: HTTPAPIClient,
|
||||
}
|
||||
|
||||
impl ClientCli {
|
||||
pub fn new() -> Self {
|
||||
dotenv::dotenv().ok();
|
||||
|
||||
// read from env
|
||||
let base_url = std::env::var("KORDOPHONE_API_URL")
|
||||
.expect("KORDOPHONE_API_URL must be set");
|
||||
|
||||
let credentials = Credentials {
|
||||
username: std::env::var("KORDOPHONE_USERNAME")
|
||||
.expect("KORDOPHONE_USERNAME must be set"),
|
||||
|
||||
password: std::env::var("KORDOPHONE_PASSWORD")
|
||||
.expect("KORDOPHONE_PASSWORD must be set"),
|
||||
};
|
||||
|
||||
let api = HTTPAPIClient::new(base_url.parse().unwrap(), credentials.into());
|
||||
Self { api: api }
|
||||
}
|
||||
|
||||
pub async fn print_version(&mut self) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let version = self.api.get_version().await?;
|
||||
println!("Version: {}", version);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn print_conversations(&mut self) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let conversations = self.api.get_conversations().await?;
|
||||
for conversation in conversations {
|
||||
println!("{}", ConversationPrinter::new(&conversation));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user