Skip to main content

origin_domain/
account.rs

1//! An account is one authenticated identity at one connector.
2
3use crate::ids::{AccountId, ConnectorId};
4use serde::{Deserialize, Serialize};
5use time::OffsetDateTime;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
8#[cfg_attr(feature = "ts", derive(ts_rs::TS))]
9#[serde(rename_all = "snake_case")]
10pub enum AccountStatus {
11    Active,
12    /// Credentials exist but are no longer valid — the user must re-authenticate.
13    Expired,
14    /// The user disconnected the account; credentials have been removed.
15    Disconnected,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19#[cfg_attr(feature = "ts", derive(ts_rs::TS))]
20pub struct Account {
21    pub id: AccountId,
22    pub connector: ConnectorId,
23    /// What the user sees. Never a token, never an internal handle.
24    pub display_name: String,
25    pub status: AccountStatus,
26    #[serde(with = "time::serde::rfc3339")]
27    #[cfg_attr(feature = "ts", ts(type = "string"))]
28    pub connected_at: OffsetDateTime,
29}
30
31impl Account {
32    pub fn is_usable(&self) -> bool {
33        matches!(self.status, AccountStatus::Active)
34    }
35}