clevercloud_sdk/v2/
myself.rs

1//! # Myself module
2//!
3//! This module provides structures and helpers to interact with the user api
4//! version 2
5
6use std::fmt::Debug;
7
8#[cfg(feature = "logging")]
9use log::{Level, debug, log_enabled};
10use oauth10a::client::{ClientError, RestClient};
11#[cfg(feature = "jsonschemas")]
12use schemars::JsonSchema;
13use serde::{Deserialize, Serialize};
14
15use crate::Client;
16
17// -----------------------------------------------------------------------------
18// Myself structure and helpers
19
20#[cfg_attr(feature = "jsonschemas", derive(JsonSchema))]
21#[derive(Serialize, PartialEq, Eq, Deserialize, Clone, Debug)]
22pub struct Myself {
23    #[serde(rename = "id")]
24    pub id: String,
25    #[serde(rename = "name")]
26    pub name: String,
27    #[serde(rename = "email")]
28    pub email: String,
29    #[serde(rename = "phone")]
30    pub phone: String,
31    #[serde(rename = "address")]
32    pub address: String,
33    #[serde(rename = "city")]
34    pub city: String,
35    #[serde(rename = "zipcode")]
36    pub zipcode: String,
37    #[serde(rename = "country")]
38    pub country: String,
39    #[serde(rename = "avatar")]
40    pub avatar: String,
41    #[serde(rename = "creationDate")]
42    pub creation_date: u64,
43    #[serde(rename = "lang")]
44    pub lang: String,
45    #[serde(rename = "emailValidated")]
46    pub email_validated: bool,
47    #[serde(rename = "oauthApps")]
48    pub oauth_apps: Vec<String>,
49    #[serde(rename = "admin")]
50    pub admin: bool,
51    #[serde(rename = "canPay")]
52    pub can_pay: bool,
53    #[serde(rename = "preferredMFA")]
54    pub preferred_mfa: String,
55    #[serde(rename = "hasPassword")]
56    pub has_password: bool,
57}
58
59// -----------------------------------------------------------------------------
60// Error enumeration
61
62#[derive(thiserror::Error, Debug)]
63pub enum Error {
64    #[error("failed to get information about the current user, {0}")]
65    Get(ClientError),
66}
67
68// -----------------------------------------------------------------------------
69// Helpers functions
70
71#[cfg_attr(feature = "tracing", tracing::instrument)]
72/// returns information about the person logged in
73pub async fn get(client: &Client) -> Result<Myself, Error> {
74    let path = format!("{}/v2/self", client.endpoint);
75
76    #[cfg(feature = "logging")]
77    if log_enabled!(Level::Debug) {
78        debug!(
79            "execute a request to get information about the logged in user, path: '{}'",
80            &path
81        );
82    }
83
84    client.get(&path).await.map_err(Error::Get)
85}