grafbase_sdk/types/
authorization.rs1use crate::wit;
2
3use super::{Error, QueryElement};
4
5#[derive(Clone, Copy)]
8pub struct ErrorId(u32);
9
10pub struct AuthorizationDecisions(wit::AuthorizationDecisions);
12
13impl From<AuthorizationDecisions> for wit::AuthorizationDecisions {
14 fn from(value: AuthorizationDecisions) -> Self {
15 value.0
16 }
17}
18
19impl AuthorizationDecisions {
20 pub fn grant_all() -> Self {
22 Self(wit::AuthorizationDecisions::GrantAll)
23 }
24
25 pub fn deny_all(error: impl Into<Error>) -> Self {
27 Self(wit::AuthorizationDecisions::DenyAll(Into::<Error>::into(error).into()))
28 }
29
30 pub fn sparse_deny() -> SparseDenyAuthorizationDecisions {
33 SparseDenyAuthorizationDecisions(wit::SparseDenyAuthorizationDecisions {
34 element_to_error: Vec::new(),
35 errors: Vec::new(),
36 })
37 }
38}
39
40pub struct SparseDenyAuthorizationDecisions(wit::SparseDenyAuthorizationDecisions);
42
43impl SparseDenyAuthorizationDecisions {
44 pub fn deny(&mut self, element: QueryElement<'_>, error: impl Into<Error>) {
46 let error_id = self.push_error(error);
47 self.deny_with_error_id(element, error_id)
48 }
49
50 pub fn deny_with_error_id(&mut self, element: QueryElement<'_>, error_id: ErrorId) {
52 self.0.element_to_error.push((element.ix, error_id.0));
53 }
54
55 pub fn push_error(&mut self, error: impl Into<Error>) -> ErrorId {
57 let error_ix = self.0.errors.len() as u32;
58 self.0.errors.push(Into::<Error>::into(error).into());
59 ErrorId(error_ix)
60 }
61}
62
63impl From<SparseDenyAuthorizationDecisions> for AuthorizationDecisions {
64 fn from(value: SparseDenyAuthorizationDecisions) -> Self {
65 AuthorizationDecisions(wit::AuthorizationDecisions::SparseDeny(value.0))
66 }
67}