1use super::{project::MemberPermission, workspace::WorkspaceReference};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
8pub struct UserReference {
9 pub gid: String,
11 #[serde(default)]
13 pub name: Option<String>,
14 #[serde(default)]
16 pub resource_type: Option<String>,
17 #[serde(default)]
19 pub email: Option<String>,
20}
21
22impl UserReference {
23 #[must_use]
25 pub fn label(&self) -> String {
26 self.name
27 .clone()
28 .or_else(|| self.email.clone())
29 .unwrap_or_else(|| self.gid.clone())
30 }
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
35pub struct UserIdentity {
36 pub resource: String,
38 #[serde(default)]
40 pub role: Option<MemberPermission>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
45#[serde(rename_all = "snake_case")]
46#[allow(
47 clippy::struct_field_names,
48 reason = "field names mirror the Asana API JSON keys; renaming to satisfy the lint would break serde mapping"
49)]
50pub struct UserPhoto {
51 #[serde(rename = "image_21x21")]
53 #[serde(default)]
54 pub image_21x21: Option<String>,
55 #[serde(rename = "image_27x27")]
57 #[serde(default)]
58 pub image_27x27: Option<String>,
59 #[serde(rename = "image_36x36")]
61 #[serde(default)]
62 pub image_36x36: Option<String>,
63 #[serde(rename = "image_60x60")]
65 #[serde(default)]
66 pub image_60x60: Option<String>,
67 #[serde(rename = "image_128x128")]
69 #[serde(default)]
70 pub image_128x128: Option<String>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
75#[serde(rename_all = "snake_case")]
76pub struct User {
77 pub gid: String,
79 pub name: String,
81 #[serde(default)]
83 pub email: Option<String>,
84 #[serde(default)]
86 pub resource_type: Option<String>,
87 #[serde(default)]
89 pub photo: Option<UserPhoto>,
90 #[serde(default)]
92 pub workspaces: Vec<WorkspaceReference>,
93}
94
95#[derive(Debug, Clone)]
97pub struct UserListParams {
98 pub workspace_gid: String,
100 pub limit: Option<usize>,
102}