smbcloud_cli/account/me/
mod.rs

1use crate::account::lib::is_logged_in;
2use crate::token::get_smb_token;
3use crate::{
4    cli::CommandResult,
5    ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
6};
7use anyhow::Result;
8use smbcloud_model::account::User;
9use smbcloud_network::environment::Environment;
10use smbcloud_networking_account::me::me;
11use spinners::Spinner;
12use tabled::{Table, Tabled};
13
14#[derive(Tabled)]
15struct UserRow {
16    #[tabled(rename = "ID")]
17    id: i32,
18    #[tabled(rename = "Email")]
19    email: String,
20    #[tabled(rename = "Created At")]
21    created_at: String,
22    #[tabled(rename = "Updated At")]
23    updated_at: String,
24}
25
26fn show_user(user: &User) {
27    let row = UserRow {
28        id: user.id,
29        email: user.email.clone(),
30        created_at: user.created_at.format("%Y-%m-%d %H:%M:%S").to_string(),
31        updated_at: user.updated_at.format("%Y-%m-%d %H:%M:%S").to_string(),
32    };
33    let table = Table::new(vec![row]);
34    println!("{table}");
35}
36
37pub async fn process_me(env: Environment) -> Result<CommandResult> {
38    if !is_logged_in(env) {
39        return Ok(CommandResult {
40            spinner: Spinner::new(
41                spinners::Spinners::SimpleDotsScrolling,
42                succeed_message("Loading"),
43            ),
44            symbol: fail_symbol(),
45            msg: fail_message("You are not logged in. Please login first."),
46        });
47    }
48    let mut spinner = Spinner::new(
49        spinners::Spinners::SimpleDotsScrolling,
50        succeed_message("Loading"),
51    );
52    let token = get_smb_token(env).await?;
53    match me(env, &token).await {
54        Ok(user) => {
55            spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
56            show_user(&user);
57            Ok(CommandResult {
58                spinner: Spinner::new(
59                    spinners::Spinners::SimpleDotsScrolling,
60                    succeed_message("Loading"),
61                ),
62                symbol: succeed_symbol(),
63                msg: succeed_message("User info loaded."),
64            })
65        }
66        Err(e) => {
67            println!("Error: {e:#?}");
68            Ok(CommandResult {
69                spinner,
70                symbol: fail_symbol(),
71                msg: fail_message("Failed to get all projects."),
72            })
73        }
74    }
75}