blob: b10a03f6f461086a0eb7871e74c7bce6338df8d0 [file] [log] [blame]
use async_trait::async_trait;
use tracing::{event, Level};
use crate::cli_command::{CliCommand, PRINT_TARGET};
use crate::client::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(());
}
}