Abstract over MutexGuards.

This commit is contained in:
Justus Winter 2019-03-13 12:32:56 +01:00
parent 8e3c9714c0
commit 37edb8e774
No known key found for this signature in database
GPG Key ID: 686F55B4AB2B3386
5 changed files with 21 additions and 6 deletions

View File

@ -1,4 +1,4 @@
use parking_lot::{Mutex, MutexGuard};
use parking_lot::Mutex;
use std::convert::{TryInto, TryFrom};
use std::fs::{create_dir_all, read_link, remove_file, rename, File};
use std::io::{Read, Write};
@ -14,6 +14,7 @@ use pathdiff::diff_paths;
use {Database, Delete, Verify, Query};
use types::{Email, Fingerprint, KeyID};
use sync::MutexGuard;
use Result;
pub struct Filesystem {
@ -381,7 +382,7 @@ fn symlink(symlink_content: &Path, symlink_name: &Path) -> Result<()> {
impl Database for Filesystem {
fn lock(&self) -> MutexGuard<()> {
self.update_lock.lock()
self.update_lock.lock().into()
}
fn new_verify_token(&self, payload: Verify) -> Result<String> {

View File

@ -15,7 +15,6 @@ use failure::Fallible as Result;
extern crate idna;
#[macro_use] extern crate log;
extern crate parking_lot;
use parking_lot::MutexGuard;
extern crate pathdiff;
extern crate rand;
extern crate serde;
@ -41,6 +40,9 @@ use serde::{Serialize, Deserialize, Deserializer, Serializer};
pub mod types;
use types::{Email, Fingerprint, KeyID};
pub mod sync;
use sync::MutexGuard;
mod fs;
pub use self::fs::Filesystem;
mod memory;

View File

@ -1,8 +1,9 @@
use parking_lot::{Mutex, MutexGuard};
use parking_lot::Mutex;
use std::collections::HashMap;
use {Database, Delete, Verify, Query};
use types::{Email, Fingerprint, KeyID};
use sync::MutexGuard;
use Result;
#[derive(Debug)]
@ -34,7 +35,7 @@ impl Default for Memory {
impl Database for Memory {
fn lock(&self) -> MutexGuard<()> {
self.update_lock.lock()
self.update_lock.lock().into()
}
fn new_verify_token(&self, payload: Verify) -> Result<String> {

View File

@ -3,7 +3,7 @@ use std::path::PathBuf;
use {Database, Delete, Filesystem, Memory, Verify, Query};
use Result;
use types::{Email, Fingerprint, KeyID};
use parking_lot::MutexGuard;
use sync::MutexGuard;
pub enum Polymorphic {
Memory(Memory),

11
database/src/sync.rs Normal file
View File

@ -0,0 +1,11 @@
use parking_lot;
pub enum MutexGuard<'a, T> {
ParkingLot(parking_lot::MutexGuard<'a, T>),
}
impl<'a, T> From<parking_lot::MutexGuard<'a, T>> for MutexGuard<'a, T> {
fn from(g: parking_lot::MutexGuard<'a, T>) -> Self {
MutexGuard::ParkingLot(g)
}
}