bitwarden_api_api/models/access_request_details_response_model.rs
1/*
2 * Bitwarden Internal API
3 *
4 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5 *
6 * The version of the OpenAPI document: latest
7 *
8 * Generated by: https://openapi-generator.tech
9 */
10
11use serde::{Deserialize, Serialize};
12
13use crate::models;
14
15/// AccessRequestDetailsResponseModel : An access request with its denormalized requester identity,
16/// serving the approver inbox, the caller's own request list, and the cipher access-state snapshot.
17/// Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.ExpiredAt has no backing
18/// store in v1 and is always null;
19/// Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.RuleId is the rule pinned
20/// at submit (null for requests created before pinning existed).
21#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
22pub struct AccessRequestDetailsResponseModel {
23 #[serde(
24 rename = "object",
25 alias = "Object",
26 skip_serializing_if = "Option::is_none"
27 )]
28 pub object: Option<String>,
29 /// The access request's unique identifier.
30 #[serde(rename = "id", alias = "Id", skip_serializing_if = "Option::is_none")]
31 pub id: Option<uuid::Uuid>,
32 /// The cipher access was requested for.
33 #[serde(
34 rename = "cipherId",
35 alias = "CipherId",
36 skip_serializing_if = "Option::is_none"
37 )]
38 pub cipher_id: Option<uuid::Uuid>,
39 /// The collection the cipher belongs to, through which the request is governed.
40 #[serde(
41 rename = "collectionId",
42 alias = "CollectionId",
43 skip_serializing_if = "Option::is_none"
44 )]
45 pub collection_id: Option<uuid::Uuid>,
46 /// The organization that owns the cipher.
47 #[serde(
48 rename = "organizationId",
49 alias = "OrganizationId",
50 skip_serializing_if = "Option::is_none"
51 )]
52 pub organization_id: Option<uuid::Uuid>,
53 /// The member who opened the request.
54 #[serde(
55 rename = "requesterId",
56 alias = "RequesterId",
57 skip_serializing_if = "Option::is_none"
58 )]
59 pub requester_id: Option<uuid::Uuid>,
60 /// The access rule that gated the cipher and that this request is evaluated against, resolved
61 /// once at submit (oldest wins) and pinned on the request. Null for requests created before
62 /// pinning existed.
63 #[serde(
64 rename = "ruleId",
65 alias = "RuleId",
66 skip_serializing_if = "Option::is_none"
67 )]
68 pub rule_id: Option<uuid::Uuid>,
69 #[serde(
70 rename = "status",
71 alias = "Status",
72 skip_serializing_if = "Option::is_none"
73 )]
74 pub status: Option<models::AccessRequestStatus>,
75 /// The activation window resolved at submit — the bounds on WHEN this request may be promoted
76 /// to a lease. Both request modes collapse into it (on-demand → `now`..`now + duration`,
77 /// scheduled → the chosen start/end), so there is no separate duration or mode field; the
78 /// length is Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.
79 /// LeaseNotAfter minus
80 /// Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.LeaseNotBefore. In
81 /// v1 the approved and leased windows are identical to this one.
82 #[serde(
83 rename = "leaseNotBefore",
84 alias = "LeaseNotBefore",
85 skip_serializing_if = "Option::is_none"
86 )]
87 pub lease_not_before: Option<String>,
88 /// The end of the resolved activation window (UTC); see
89 /// Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.LeaseNotBefore.
90 #[serde(
91 rename = "leaseNotAfter",
92 alias = "LeaseNotAfter",
93 skip_serializing_if = "Option::is_none"
94 )]
95 pub lease_not_after: Option<String>,
96 /// The optional justification the requester supplied when opening the request.
97 #[serde(
98 rename = "reason",
99 alias = "Reason",
100 skip_serializing_if = "Option::is_none"
101 )]
102 pub reason: Option<String>,
103 /// When the request was opened (UTC).
104 #[serde(
105 rename = "submittedAt",
106 alias = "SubmittedAt",
107 skip_serializing_if = "Option::is_none"
108 )]
109 pub submitted_at: Option<String>,
110 /// When the request was approved, denied, or cancelled (UTC); null while pending.
111 #[serde(
112 rename = "resolvedAt",
113 alias = "ResolvedAt",
114 skip_serializing_if = "Option::is_none"
115 )]
116 pub resolved_at: Option<String>,
117 /// Distinct from
118 /// Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.ResolvedAt; set when
119 /// an approved request lapses unactivated. Not tracked in v1.
120 #[serde(
121 rename = "expiredAt",
122 alias = "ExpiredAt",
123 skip_serializing_if = "Option::is_none"
124 )]
125 pub expired_at: Option<String>,
126 /// The request's decision log, oldest first — one element per decision (human or automatic).
127 /// Each carries who decided (`deciderKind`), the verdict, and (for a human decision) the
128 /// approver's identity and comment. Empty only while pending. An array so multi-party approval
129 /// lands without breaking the contract.
130 #[serde(
131 rename = "decisions",
132 alias = "Decisions",
133 skip_serializing_if = "Option::is_none"
134 )]
135 pub decisions: Option<Vec<models::AccessRequestDecisionResponseModel>>,
136 /// Set once an approved request has produced a lease.
137 #[serde(
138 rename = "producedLeaseId",
139 alias = "ProducedLeaseId",
140 skip_serializing_if = "Option::is_none"
141 )]
142 pub produced_lease_id: Option<uuid::Uuid>,
143 #[serde(
144 rename = "producedLeaseStatus",
145 alias = "ProducedLeaseStatus",
146 skip_serializing_if = "Option::is_none"
147 )]
148 pub produced_lease_status: Option<models::AccessLeaseStatus>,
149 /// The parent lease if this is an extension request.
150 #[serde(
151 rename = "extensionOfLeaseId",
152 alias = "ExtensionOfLeaseId",
153 skip_serializing_if = "Option::is_none"
154 )]
155 pub extension_of_lease_id: Option<uuid::Uuid>,
156 /// The requester's display name, denormalized by the server; null only when the user could not
157 /// be resolved.
158 #[serde(
159 rename = "requesterName",
160 alias = "RequesterName",
161 skip_serializing_if = "Option::is_none"
162 )]
163 pub requester_name: Option<String>,
164 /// The requester's email, denormalized by the server; null only when the user could not be
165 /// resolved.
166 #[serde(
167 rename = "requesterEmail",
168 alias = "RequesterEmail",
169 skip_serializing_if = "Option::is_none"
170 )]
171 pub requester_email: Option<String>,
172}
173
174impl AccessRequestDetailsResponseModel {
175 /// An access request with its denormalized requester identity, serving the approver inbox, the
176 /// caller's own request list, and the cipher access-state snapshot.
177 /// Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.ExpiredAt has no
178 /// backing store in v1 and is always null;
179 /// Bit.Services.Pam.Api.Models.Response.AccessRequestDetailsResponseModel.RuleId is the rule
180 /// pinned at submit (null for requests created before pinning existed).
181 pub fn new() -> AccessRequestDetailsResponseModel {
182 AccessRequestDetailsResponseModel {
183 object: None,
184 id: None,
185 cipher_id: None,
186 collection_id: None,
187 organization_id: None,
188 requester_id: None,
189 rule_id: None,
190 status: None,
191 lease_not_before: None,
192 lease_not_after: None,
193 reason: None,
194 submitted_at: None,
195 resolved_at: None,
196 expired_at: None,
197 decisions: None,
198 produced_lease_id: None,
199 produced_lease_status: None,
200 extension_of_lease_id: None,
201 requester_name: None,
202 requester_email: None,
203 }
204 }
205}