robespierre_models/
auth.rs

1use serde::{Deserialize, Serialize};
2
3use crate::id::{SessionId, UserId};
4
5/*
6Newtypes
7*/
8
9#[derive(Serialize, Deserialize, Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
10#[serde(transparent)]
11pub struct Token(pub String);
12
13#[derive(Serialize, Deserialize, Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
14#[serde(transparent)]
15pub struct WebPushSubscription(pub String);
16
17/*
18Types
19*/
20
21// https://github.com/revoltchat/api/blob/097f40e37108cd3a1816b1c2cc69a137ae317069/types/Auth.ts#L3-L13
22#[derive(Serialize, Deserialize, Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
23#[serde(deny_unknown_fields)]
24pub struct Account {
25    #[serde(rename = "_id")]
26    pub id: UserId,
27    pub email: String,
28}
29
30// https://github.com/revoltchat/api/blob/097f40e37108cd3a1816b1c2cc69a137ae317069/types/Auth.ts#L15-L40
31#[derive(Serialize, Deserialize, Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
32#[serde(deny_unknown_fields)]
33pub struct Session {
34    #[serde(rename = "_id", default, skip_serializing_if = "Option::is_none")]
35    pub id: Option<SessionId>,
36    pub user_id: UserId,
37    pub token: Token,
38    #[serde(rename = "name")]
39    pub device_name: String,
40    #[serde(
41        rename = "subscription",
42        default,
43        skip_serializing_if = "Option::is_none"
44    )]
45    pub subscription: Option<WebPushSubscription>,
46}
47
48// https://github.com/revoltchat/api/blob/097f40e37108cd3a1816b1c2cc69a137ae317069/types/Auth.ts#L42-L52
49#[derive(Serialize, Deserialize, Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
50#[serde(deny_unknown_fields)]
51pub struct SessionInfo {
52    #[serde(rename = "_id")]
53    id: SessionId,
54    #[serde(rename = "name")]
55    device_name: String,
56}