Skip to main content

authz_resolver/domain/
local_client.rs

1//! Local (in-process) client for the `AuthZ` resolver.
2
3use std::sync::Arc;
4
5use async_trait::async_trait;
6use authz_resolver_sdk::{
7    AuthZResolverClient, AuthZResolverError, EvaluationRequest, EvaluationResponse,
8};
9use modkit_macros::domain_model;
10
11use super::{DomainError, Service};
12
13/// Local client wrapping the service.
14#[domain_model]
15pub struct AuthZResolverLocalClient {
16    svc: Arc<Service>,
17}
18
19impl AuthZResolverLocalClient {
20    #[must_use]
21    pub fn new(svc: Arc<Service>) -> Self {
22        Self { svc }
23    }
24}
25
26fn log_and_convert(op: &str, e: DomainError) -> AuthZResolverError {
27    tracing::error!(operation = op, error = ?e, "authz_resolver call failed");
28    e.into()
29}
30
31#[async_trait]
32impl AuthZResolverClient for AuthZResolverLocalClient {
33    async fn evaluate(
34        &self,
35        request: EvaluationRequest,
36    ) -> Result<EvaluationResponse, AuthZResolverError> {
37        self.svc
38            .evaluate(request)
39            .await
40            .map_err(|e| log_and_convert("evaluate", e))
41    }
42}