wekan-cli 2.1.0

Agent-first, human-friendly command-line client for Wekan
Documentation
use secrecy::{ExposeSecret, SecretString};
use serde::{Serialize, Serializer};

#[derive(Debug, Serialize)]
pub struct UserTokenCreateSuccess {
    pub user_id: String,
    #[serde(serialize_with = "serialize_issued_token")]
    auth_token: SecretString,
}

impl UserTokenCreateSuccess {
    pub fn new(user_id: String, auth_token: SecretString) -> Self {
        Self {
            user_id,
            auth_token,
        }
    }

    pub fn auth_token(&self) -> &SecretString {
        &self.auth_token
    }
}

impl PartialEq for UserTokenCreateSuccess {
    fn eq(&self, other: &Self) -> bool {
        self.user_id == other.user_id
            && self.auth_token.expose_secret() == other.auth_token.expose_secret()
    }
}
impl Eq for UserTokenCreateSuccess {}

fn serialize_issued_token<S: Serializer>(token: &SecretString, s: S) -> Result<S::Ok, S::Error> {
    s.serialize_str(token.expose_secret())
}

#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum UserTokenDeleteScope {
    Single,
    All,
}

#[derive(Debug, Eq, PartialEq, Serialize)]
pub struct UserTokenDeleteSuccess {
    pub user_id: String,
    pub scope: UserTokenDeleteScope,
    pub message: String,
}