///|
/// One request paired with its authorization decision in a batch result.
pub(all) struct AuthorizationResult {
request : Request
decision : Decision
} derive(Debug, Eq)
///|
/// Authorize a request collection while retaining its input order. Requests
/// are evaluated independently with the same semantics as `authorize`.
pub fn Policy::authorize_batch(
self : Policy,
requests : Array[Request],
) -> Array[AuthorizationResult] {
[
for request in requests => { request, decision: self.authorize(request) }
]
}
///|
/// Serialize a batch item as its original request and resulting decision.
pub fn AuthorizationResult::to_json(self : AuthorizationResult) -> Json {
Json::object({
"request": self.request.to_json(),
"decision": self.decision.to_json(),
})
}
///|
/// Serialize a batch result array for transport or audit storage.
pub fn authorization_results_to_json(
results : Array[AuthorizationResult],
) -> Json {
Json::array([ for result in results => result.to_json() ])
}