1use chrono::{DateTime, Utc};
2use serde::{Deserialize};
3
4use crate::teams::BaseTeam;
5
6#[derive(Clone, Debug, Deserialize)]
7pub struct BaseUser {
8 pub id: String,
9 pub username: String,
10}
11
12#[derive(Clone, Debug, Deserialize)]
13pub struct BaseUserWithRole {
14 #[serde(flatten)]
15 pub base: BaseUser,
16 pub role: String,
17}
18
19#[derive(Clone, Debug, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct BaseUserWithRoleCreatedAt {
22 #[serde(flatten)]
23 pub base: BaseUserWithRole,
24 pub created_at: DateTime<Utc>,
25}
26
27#[derive(Clone, Debug, Deserialize)]
28#[serde(rename_all = "camelCase")]
29pub struct User {
30 #[serde(flatten)]
31 pub base: BaseUserWithRole,
32 pub is_admin: bool,
33}
34
35#[derive(Clone, Debug, Deserialize)]
36pub struct UserWithTeams {
37 #[serde(flatten)]
38 pub user: User,
39 pub teams: Vec<BaseTeam>,
40}
41
42#[derive(Clone, Debug, Deserialize)]
43#[serde(rename_all = "camelCase")]
44pub struct DetailedUser {
45 #[serde(flatten)]
46 pub base: BaseUserWithRoleCreatedAt,
47 pub logo_url: Option<String>,
48 pub display_name: Option<String>,
49 pub updated_at: DateTime<Utc>,
50 pub deleted_at: Option<DateTime<Utc>>,
51 #[serde(rename = "_count")]
52 pub count: Count,
53}
54
55#[derive(Clone, Debug, Deserialize)]
56pub struct Count {
57 pub websites: u32,
58}