use async_trait::async_trait;
use tracing::{Level, event};
use crate::commands::cli_command::{CliCommand, PRINT_TARGET};
use iggy_common::Client;
use super::common::{ContextManager, DEFAULT_CONTEXT_NAME};
pub struct UseContextCmd {
context_name: String,
}
impl UseContextCmd {
pub fn new(context_name: String) -> Self {
Self { context_name }
}
}
impl Default for UseContextCmd {
fn default() -> Self {
UseContextCmd {
context_name: DEFAULT_CONTEXT_NAME.to_string(),
}
}
}
#[async_trait]
impl CliCommand for UseContextCmd {
fn explain(&self) -> String {
let context_name = &self.context_name;
format!("use context {context_name}")
}
fn login_required(&self) -> bool {
false
}
fn connection_required(&self) -> bool {
false
}
async fn execute_cmd(&mut self, _client: &dyn Client) -> anyhow::Result<(), anyhow::Error> {
let mut context_mgr = ContextManager::default();
context_mgr
.set_active_context_key(&self.context_name)
.await?;
event!(target: PRINT_TARGET, Level::INFO, "active context set to '{}'", self.context_name);
return Ok(());
}
}