From 6ae5ccb5f73484f934790afe416292bdbb4f48a0 Mon Sep 17 00:00:00 2001 From: Tiago Dinis Date: Sat, 10 Sep 2022 13:08:08 +0100 Subject: [PATCH] feat: add aboutme command --- Cargo.lock | 388 ++++++++-------------------------------- Cargo.toml | 1 + src/commands/aboutme.rs | 53 ++++++ src/commands/mod.rs | 1 + src/entities/mod.rs | 6 +- src/entities/user.rs | 31 +++- src/main.rs | 9 + 7 files changed, 171 insertions(+), 318 deletions(-) create mode 100644 src/commands/aboutme.rs diff --git a/Cargo.lock b/Cargo.lock index 7632285..7c8e120 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli", -] - [[package]] name = "adler" version = "1.0.2" @@ -30,12 +21,12 @@ dependencies = [ ] [[package]] -name = "aho-corasick" -version = "0.7.19" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "memchr", + "libc", ] [[package]] @@ -55,21 +46,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "backtrace" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "base64" version = "0.13.0" @@ -151,6 +127,22 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "serde", + "time 0.1.44", + "wasm-bindgen", + "winapi", +] + [[package]] name = "cipher" version = "0.3.0" @@ -230,16 +222,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.3" @@ -338,8 +320,9 @@ dependencies = [ [[package]] name = "discloud" -version = "0.3.0-alpha" +version = "0.3.2-alpha" dependencies = [ + "chrono", "clap", "colored", "dialoguer", @@ -392,28 +375,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] @@ -483,15 +450,9 @@ checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", ] -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" - [[package]] name = "h2" version = "0.3.14" @@ -547,17 +508,6 @@ dependencies = [ "digest", ] -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - [[package]] name = "http" version = "0.2.8" @@ -630,25 +580,25 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "iana-time-zone" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "4c495f162af0bf17656d0014a0eded5f3cd2f365fdd204548c2869db89359dc7" dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", + "android_system_properties", + "core-foundation-sys", + "js-sys", + "once_cell", + "wasm-bindgen", + "winapi", ] [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -729,18 +679,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" version = "2.5.0" @@ -780,26 +718,27 @@ checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys", ] [[package]] -name = "native-tls" -version = "0.2.10" +name = "num-integer" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", ] [[package]] @@ -821,15 +760,6 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.14.0" @@ -842,51 +772,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" -[[package]] -name = "openssl" -version = "0.10.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" -dependencies = [ - "autocfg", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "os_str_bytes" version = "6.3.0" @@ -918,9 +803,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pin-project-lite" @@ -1038,23 +923,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - [[package]] name = "remove_dir_all" version = "0.5.3" @@ -1080,14 +948,12 @@ dependencies = [ "http-body", "hyper", "hyper-rustls", - "hyper-tls", "ipnet", "js-sys", "lazy_static", "log", "mime", "mime_guess", - "native-tls", "percent-encoding", "pin-project-lite", "rustls", @@ -1096,7 +962,6 @@ dependencies = [ "serde_json", "serde_urlencoded", "tokio", - "tokio-native-tls", "tokio-rustls", "tower-service", "url", @@ -1122,21 +987,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - [[package]] name = "rustls" version = "0.20.6" @@ -1179,16 +1029,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" -dependencies = [ - "lazy_static", - "windows-sys", -] - [[package]] name = "sct" version = "0.7.0" @@ -1199,35 +1039,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "security-framework" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" - [[package]] name = "sentry" version = "0.27.0" @@ -1236,38 +1047,10 @@ checksum = "73642819e7fa63eb264abc818a2f65ac8764afbe4870b5ee25bcecc491be0d4c" dependencies = [ "httpdate", "reqwest", - "sentry-backtrace", - "sentry-contexts", "sentry-core", - "sentry-panic", "tokio", ] -[[package]] -name = "sentry-backtrace" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49bafa55eefc6dbc04c7dac91e8c8ab9e89e9414f3193c105cabd991bbc75134" -dependencies = [ - "backtrace", - "once_cell", - "regex", - "sentry-core", -] - -[[package]] -name = "sentry-contexts" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c63317c4051889e73f0b00ce4024cae3e6a225f2e18a27d2c1522eb9ce2743da" -dependencies = [ - "hostname", - "libc", - "rustc_version", - "sentry-core", - "uname", -] - [[package]] name = "sentry-core" version = "0.27.0" @@ -1281,16 +1064,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "sentry-panic" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "696c74c5882d5a0d5b4a31d0ff3989b04da49be7983b7f52a52c667da5b480bf" -dependencies = [ - "sentry-backtrace", - "sentry-core", -] - [[package]] name = "sentry-types" version = "0.27.0" @@ -1303,7 +1076,7 @@ dependencies = [ "serde", "serde_json", "thiserror", - "time", + "time 0.3.14", "url", "uuid", ] @@ -1513,6 +1286,17 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + [[package]] name = "time" version = "0.3.14" @@ -1564,16 +1348,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.23.4" @@ -1587,9 +1361,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -1637,15 +1411,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" -[[package]] -name = "uname" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8" -dependencies = [ - "libc", -] - [[package]] name = "unicase" version = "2.6.0" @@ -1690,13 +1455,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", "serde", ] @@ -1711,12 +1475,6 @@ dependencies = [ "serde", ] -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.4" @@ -1744,6 +1502,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1950,7 +1714,7 @@ dependencies = [ "hmac", "pbkdf2", "sha1", - "time", + "time 0.3.14", "zstd", ] diff --git a/Cargo.toml b/Cargo.toml index cecd104..ef3d25c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ description = "Blazingly fast Discloud CLI" license = "Apache-2.0" [dependencies] +chrono = { version = "0.4.22", features = ["serde"] } clap = { version = "3.2.20", features = ["derive"] } colored = "2.0.0" dialoguer = "0.10.2" diff --git a/src/commands/aboutme.rs b/src/commands/aboutme.rs new file mode 100644 index 0000000..97785e6 --- /dev/null +++ b/src/commands/aboutme.rs @@ -0,0 +1,53 @@ +use chrono::{Datelike, Timelike}; +use colored::Colorize; + +pub fn aboutme(){ + let token = super::expect_token(); + match crate::entities::user::fetch_user(token.clone()) { + Ok(user) => { + println!("ID: {}", user.user_id.bright_black()); + println!("Plan: {}", color_plan(user.plan)); + let end_date = user.plan_data_end; + println!("Your plan ends at: {}/{}/{} {}:{}", end_date.day(), end_date.month(), end_date.year(), end_date.hour(), end_date.minute()); + println!(" Which means you have {} days left!", user.last_data_left.days.to_string().green().bold()); + println!("Memory:"); + println!(" Total: {}{}", user.total_ram_mb.to_string().green().bold(), "MB".green().bold()); + println!(" Used: {}{}", user.ram_used_mb.to_string().green().bold(), "MB".green().bold()); + println!(" Available: {}{}", (user.total_ram_mb - user.ram_used_mb).to_string().green().bold(), "MB".green().bold()); + println!("Locale: {}", user.locale.blue()); + } + Err(err) => super::err(&err.to_string()) + } +} +fn color_plan(plan: String) -> String { + match plan.as_str() { + "Free" => { + plan.bright_black().to_string() + } + "Carbon" => { + plan.bright_black().bold().to_string() + } + "Gold" => { + plan.yellow().bold().to_string() + } + "Platinum" => { + plan.blue().bold().to_string() + } + "Diamond" => { + plan.cyan().bold().to_string() + } + "Ruby" => { + plan.red().bold().to_string() + } + "Sapphire" => { + plan.bright_red().bold().to_string() + } + "Krypton" => { + plan.bright_green().bold().to_string() + } + "Special" => { + plan.bright_cyan().bold().to_string() + } + _ => unreachable!() + } +} diff --git a/src/commands/mod.rs b/src/commands/mod.rs index 57a16ef..7c0cf38 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -1,3 +1,4 @@ +pub mod aboutme; pub mod logs; pub mod stop; pub mod start; diff --git a/src/entities/mod.rs b/src/entities/mod.rs index 4da5daa..0c81630 100644 --- a/src/entities/mod.rs +++ b/src/entities/mod.rs @@ -7,15 +7,15 @@ pub enum FetchError { NotLoggedIn, FailedToConnect(reqwest::Error), APIReturnedError(u16), + FailedWithMessage(String) } impl Display for FetchError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::NotLoggedIn => f.write_str("not logged in"), Self::FailedToConnect(err) => f.write_str(&format!("failed to connect: {}", err)), - Self::APIReturnedError(status) => { - f.write_str(&format!("api returned code: {}", status)) - } + Self::APIReturnedError(status) => f.write_str(&format!("api returned code: {}", status)), + Self::FailedWithMessage(msg) => f.write_str(&msg), } } } diff --git a/src/entities/user.rs b/src/entities/user.rs index 5a5896f..fc97939 100644 --- a/src/entities/user.rs +++ b/src/entities/user.rs @@ -1,9 +1,13 @@ use serde::Deserialize; use super::FetchError; + #[derive(Deserialize)] -struct UserResponse { - user: User, +pub struct UserDate { + pub days: u32, + pub hours: u32, + pub minutes: u32, + pub seconds: u32, } #[derive(Deserialize)] pub struct User { @@ -18,8 +22,20 @@ pub struct User { #[serde(rename = "customdomains")] pub custom_domains: Vec, pub apps: Vec, + pub plan: String, + pub locale: String, + #[serde(rename = "planDataEnd")] + pub plan_data_end: chrono::DateTime, + #[serde(rename = "lastDataLeft")] + pub last_data_left: UserDate } pub fn fetch_user(token: String) -> Result { + #[derive(Deserialize)] + struct UserResponse { + user: User, + status: String, + message: String + } let client = reqwest::blocking::Client::new(); let req = client .get(crate::api_url!("/user")) @@ -27,7 +43,16 @@ pub fn fetch_user(token: String) -> Result { match req.send() { Ok(res) => { if res.status().is_success() { - Ok(res.json::().unwrap().user) + let res = res.json::().unwrap(); + match res.status.as_str() { + "ok" => { + Ok(res.user) + } + "error" => { + Err(FetchError::FailedWithMessage(res.message)) + } + _ => unreachable!() + } } else { Err(FetchError::APIReturnedError(res.status().as_u16())) } diff --git a/src/main.rs b/src/main.rs index 0936ef7..96cd7fa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -96,6 +96,11 @@ fn main() -> std::io::Result<()> { .about("Prints logs of an app.") .alias("terminal") .alias("t") + ) + .subcommand( + Command::new("aboutme") + .about("Shows information about you.") + .alias("user") ); let matches = cmd.get_matches(); match matches.subcommand() { @@ -135,6 +140,10 @@ fn main() -> std::io::Result<()> { commands::logs::logs(); Ok(()) } + Some(("aboutme", _)) => { + commands::aboutme::aboutme(); + Ok(()) + } _ => unreachable!(), } }