pooly 0.2.1

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

use dashmap::mapref::one::Ref;
use sled::Db;

use crate::LocalSecretsService;
use crate::models::auth::access::{LiteralConnectionIdAccessEntry, WildcardPatternConnectionIdAccessEntry};
use crate::models::errors::StorageError;
use crate::models::versioning::updatable::{StringSetCommand, WildcardPatternSetCommand};
use crate::models::versioning::versioned::Versioned;
use crate::services::updatable::{CacheBackedService, UpdatableService};

const LITERAL_CONNECTION_IDS: &str = "literal_connection_id_aces_v1";
const PATTERN_CONNECTION_IDS: &str = "pattern_connection_id_aces_v1";

pub struct LiteralConnectionIdAccessEntryService {

    delegate: CacheBackedService<StringSetCommand, LiteralConnectionIdAccessEntry>

}

pub struct WildcardPatternConnectionIdAccessEntryService {

    delegate: CacheBackedService<WildcardPatternSetCommand, WildcardPatternConnectionIdAccessEntry>

}

impl LiteralConnectionIdAccessEntryService {

    pub fn new(db: Arc<Db>,
               secrets_service: Arc<LocalSecretsService>)
               -> Result<LiteralConnectionIdAccessEntryService, StorageError> {
        Ok(
            LiteralConnectionIdAccessEntryService {
                delegate: CacheBackedService::new(
                    db, LITERAL_CONNECTION_IDS, secrets_service)?
            }
        )
    }

}

impl WildcardPatternConnectionIdAccessEntryService {

    pub fn new(db: Arc<Db>,
               secrets_service: Arc<LocalSecretsService>)
               -> Result<WildcardPatternConnectionIdAccessEntryService, StorageError> {
        Ok(
            WildcardPatternConnectionIdAccessEntryService {
                delegate: CacheBackedService::new(
                    db, PATTERN_CONNECTION_IDS, secrets_service)?
            }
        )
    }

}

impl UpdatableService<StringSetCommand, LiteralConnectionIdAccessEntry> for LiteralConnectionIdAccessEntryService {
    fn get(&self, id: &str) -> Result<Option<Ref<String, Versioned<LiteralConnectionIdAccessEntry>>>, StorageError> {
        self.delegate.get(id)
    }

    fn get_all_keys(&self) -> Result<HashSet<String>, StorageError> {
        self.delegate.get_all_keys()
    }

    fn create(&self, payload: LiteralConnectionIdAccessEntry) -> Result<Versioned<LiteralConnectionIdAccessEntry>, StorageError> {
        self.delegate.create(payload)
    }

    fn update(&self, id: &str, command: StringSetCommand) -> Result<Versioned<LiteralConnectionIdAccessEntry>, StorageError> {
        self.delegate.update(id, command)
    }

    fn delete(&self, id: &str) -> Result<(), StorageError> {
        self.delegate.delete(id)
    }

    fn clear(&self) -> Result<(), ()> {
        self.delegate.clear()
    }
}

impl UpdatableService<WildcardPatternSetCommand, WildcardPatternConnectionIdAccessEntry> for WildcardPatternConnectionIdAccessEntryService {
    fn get(&self, id: &str) -> Result<Option<Ref<String, Versioned<WildcardPatternConnectionIdAccessEntry>>>, StorageError> {
        self.delegate.get(id)
    }

    fn get_all_keys(&self) -> Result<HashSet<String>, StorageError> {
        self.delegate.get_all_keys()
    }

    fn create(&self, payload: WildcardPatternConnectionIdAccessEntry) -> Result<Versioned<WildcardPatternConnectionIdAccessEntry>, StorageError> {
        self.delegate.create(payload)
    }

    fn update(&self, id: &str, command: WildcardPatternSetCommand) -> Result<Versioned<WildcardPatternConnectionIdAccessEntry>, StorageError> {
        self.delegate.update(id, command)
    }

    fn delete(&self, id: &str) -> Result<(), StorageError> {
        self.delegate.delete(id)
    }

    fn clear(&self) -> Result<(), ()> {
        self.delegate.clear()
    }
}