smbcloud_cli/account/me/
mod.rs1use 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}