iggy_cli/commands/binary_system/
session_status.rs1use crate::commands::binary_system::session::ServerSession;
20use crate::commands::cli_command::{CliCommand, PRINT_TARGET};
21use async_trait::async_trait;
22use comfy_table::Table;
23use iggy_common::Client;
24use tracing::{Level, event};
25
26pub struct SessionStatusCmd {
27 server_session: ServerSession,
28}
29
30impl SessionStatusCmd {
31 pub fn new(server_address: String) -> Self {
32 Self {
33 server_session: ServerSession::new(server_address),
34 }
35 }
36}
37
38#[async_trait]
39impl CliCommand for SessionStatusCmd {
40 fn explain(&self) -> String {
41 "session status command".to_owned()
42 }
43
44 fn login_required(&self) -> bool {
45 false
46 }
47
48 fn connection_required(&self) -> bool {
49 false
50 }
51
52 async fn execute_cmd(&mut self, _client: &dyn Client) -> anyhow::Result<(), anyhow::Error> {
53 let is_active = self.server_session.is_active();
54 let server_address = self.server_session.get_server_address();
55
56 let mut table = Table::new();
57 table.set_header(vec!["Property", "Value"]);
58 table.add_row(vec!["Server Address", server_address]);
59 let active = if is_active {
60 "Yes (token presence only, freshness not verified)"
61 } else {
62 "No"
63 };
64 table.add_row(vec!["Session Active", active]);
65
66 event!(target: PRINT_TARGET, Level::INFO, "{table}");
67
68 Ok(())
69 }
70}
71
72#[cfg(test)]
73mod tests {
74 use super::*;
75
76 #[test]
77 fn should_return_explain_message() {
78 let cmd = SessionStatusCmd::new("127.0.0.1:8090".to_string());
79 assert_eq!(cmd.explain(), "session status command");
80 }
81
82 #[test]
83 fn should_not_require_login() {
84 let cmd = SessionStatusCmd::new("127.0.0.1:8090".to_string());
85 assert!(!cmd.login_required());
86 }
87
88 #[test]
89 fn should_not_require_connection() {
90 let cmd = SessionStatusCmd::new("127.0.0.1:8090".to_string());
91 assert!(!cmd.connection_required());
92 }
93}