box_open_sdk/models/schemas/
hub_collaborations.rs1use crate::serde_helpers::double_option;
4
5use super::*;
6
7#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
8pub struct HubBase {
9 pub id: String,
10 pub r#type: HubType,
11}
12
13#[derive(Clone, Debug, PartialEq)]
14pub enum HubAccessGrantee {
15 User(HubCollaborationUser),
16 Group(GroupMini),
17 Unknown(serde_json::Value),
19}
20
21impl Default for HubAccessGrantee {
22 fn default() -> Self {
23 Self::Unknown(Default::default())
24 }
25}
26
27impl serde::Serialize for HubAccessGrantee {
28 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29 match self {
30 Self::User(inner) => inner.serialize(serializer),
31 Self::Group(inner) => inner.serialize(serializer),
32 Self::Unknown(inner) => inner.serialize(serializer),
33 }
34 }
35}
36
37impl<'de> serde::Deserialize<'de> for HubAccessGrantee {
38 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
39 let value = serde_json::Value::deserialize(deserializer)?;
40 let tag = value
41 .get("type")
42 .and_then(serde_json::Value::as_str)
43 .map(str::to_owned);
44 match tag.as_deref() {
45 Some("user") => Ok(Self::User(
46 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
47 )),
48 Some("group") => Ok(Self::Group(
49 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
50 )),
51 _ => Ok(Self::Unknown(value)),
52 }
53 }
54}
55
56#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
57pub struct HubCollaboration {
58 pub id: String,
59 pub r#type: HubCollaborationType,
60 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub hub: Option<HubBase>,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub accessible_by: Option<HubAccessGrantee>,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
65 pub role: Option<String>,
66 #[serde(default, skip_serializing_if = "Option::is_none")]
67 pub status: Option<HubCollaborationStatus>,
68 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub acceptance_requirements_status: Option<HubCollaborationAcceptanceRequirementsStatus>,
70}
71
72#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
73pub struct HubCollaborationCreateRequest {
74 pub hub: HubCollaborationCreateRequestHub,
75 pub accessible_by: HubCollaborationCreateRequestAccessibleBy,
76 pub role: String,
77}
78
79#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
80pub struct HubCollaborations {
81 #[serde(default, skip_serializing_if = "Option::is_none")]
82 pub entries: Option<Vec<HubCollaboration>>,
83 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub limit: Option<i64>,
85 #[serde(
86 default,
87 skip_serializing_if = "Option::is_none",
88 deserialize_with = "double_option"
89 )]
90 pub next_marker: Option<Option<String>>,
91}
92
93#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
94pub struct HubCollaborationUpdateRequest {
95 #[serde(default, skip_serializing_if = "Option::is_none")]
96 pub role: Option<String>,
97}
98
99#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
100pub struct HubCollaborationUser {
101 pub id: String,
102 pub r#type: HubCollaborationUserType,
103 #[serde(default, skip_serializing_if = "Option::is_none")]
104 pub name: Option<String>,
105 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub login: Option<String>,
107}
108
109#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
110#[serde(transparent)]
111pub struct HubCollaborationType(pub String);
112
113impl HubCollaborationType {
114 pub const HUB_COLLABORATION: &'static str = "hub_collaboration";
115}
116
117#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
118#[serde(transparent)]
119pub struct HubCollaborationStatus(pub String);
120
121impl HubCollaborationStatus {
122 pub const ACCEPTED: &'static str = "accepted";
123 pub const PENDING: &'static str = "pending";
124 pub const REJECTED: &'static str = "rejected";
125}
126
127#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
128pub struct HubCollaborationAcceptanceRequirementsStatus {
129 #[serde(default, skip_serializing_if = "Option::is_none")]
130 pub terms_of_service_requirement: Option<AcceptanceRequirementsStatusTermsOfServiceRequirement>,
131 #[serde(default, skip_serializing_if = "Option::is_none")]
132 pub strong_password_requirement: Option<AcceptanceRequirementsStatusStrongPasswordRequirement>,
133 #[serde(default, skip_serializing_if = "Option::is_none")]
134 pub two_factor_authentication_requirement:
135 Option<AcceptanceRequirementsStatusTwoFactorAuthenticationRequirement>,
136}
137
138#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
139pub struct HubCollaborationCreateRequestHub {
140 pub r#type: HubType,
141 pub id: String,
142}
143
144#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
145pub struct HubCollaborationCreateRequestAccessibleBy {
146 pub r#type: String,
147 #[serde(default, skip_serializing_if = "Option::is_none")]
148 pub id: Option<String>,
149 #[serde(default, skip_serializing_if = "Option::is_none")]
150 pub login: Option<String>,
151}