pooly 0.2.1

A protobuf to Postgres adapter + connection pooling middleware.
Documentation
use std::sync::Arc;

use crate::models::auth::access::ConnectionIdAccessEntry;
use crate::models::errors::StorageError;
use crate::services::auth::connection_ids::{LiteralConnectionIdAccessEntryService, WildcardPatternConnectionIdAccessEntryService};
use crate::UpdatableService;

pub struct AccessControlService {

    literal_ids_service: Arc<LiteralConnectionIdAccessEntryService>,
    patterns_service: Arc<WildcardPatternConnectionIdAccessEntryService>

}

impl AccessControlService {

    pub fn new(literal_ids_service: Arc<LiteralConnectionIdAccessEntryService>,
               patterns_service: Arc<WildcardPatternConnectionIdAccessEntryService>) -> AccessControlService {
        AccessControlService {
            literal_ids_service,
            patterns_service
        }
    }

    pub fn is_allowed(&self,
                      client_id: &str,
                      connection_id: &str) -> Result<bool, StorageError> {
        Ok(
          match (self.literal_ids_service.get(client_id)?, self.patterns_service.get(client_id)?) {
              (None, None) => false,
              (None, Some(pattern)) =>
                  pattern.get_value().is_allowed(client_id, connection_id),
              (Some(literal), None) =>
                  literal.get_value().is_allowed(client_id, connection_id),
              (Some(literal),
                  Some(pattern)) =>
                  literal.get_value().is_allowed(client_id, connection_id)
                      || pattern.get_value().is_allowed(client_id, connection_id)
          }
        )
    }

}