Less DB coupling with VFS and DDNS

This commit is contained in:
Antoine Gersant 2017-07-01 13:27:57 -07:00
parent bdc33a29aa
commit 8a7a63ce61
3 changed files with 36 additions and 29 deletions

View file

@ -7,11 +7,9 @@ use std::path::{Path, PathBuf};
use std::sync::{Arc, Mutex};
use config::{MiscSettings, UserConfig};
use ddns::{DDNSConfigSource, DDNSConfig};
use errors::*;
use index;
use user::*;
use vfs::{MountPoint, VFS, VFSSource};
mod schema;
@ -126,33 +124,6 @@ impl ConnectionSource for DB {
}
}
impl DDNSConfigSource for DB {
fn get_ddns_config(&self) -> Result<DDNSConfig> {
use self::ddns_config::dsl::*;
let connection = self.connection.lock().unwrap();
let connection = connection.deref();
Ok(ddns_config
.select((host, username, password))
.get_result(connection)?)
}
}
impl VFSSource for DB {
fn get_vfs(&self) -> Result<VFS> {
use self::mount_points::dsl::*;
let mut vfs = VFS::new();
let connection = self.connection.lock().unwrap();
let connection = connection.deref();
let points: Vec<MountPoint> = mount_points
.select((source, name))
.get_results(connection)?;
for point in points {
vfs.mount(&Path::new(&point.source), &point.name)?;
}
Ok(vfs)
}
}
fn _get_test_db(name: &str) -> DB {
let config_path = Path::new("test/config.toml");
let config = UserConfig::parse(&config_path).unwrap();

View file

@ -1,9 +1,13 @@
use core::ops::Deref;
use diesel::prelude::*;
use reqwest;
use reqwest::header::{Authorization, Basic};
use std::io;
use std::thread;
use std::time;
use db::{ConnectionSource, DB};
use db::ddns_config;
use errors;
#[derive(Debug, Deserialize, Queryable)]
@ -17,6 +21,18 @@ pub trait DDNSConfigSource {
fn get_ddns_config(&self) -> errors::Result<DDNSConfig>;
}
impl DDNSConfigSource for DB {
fn get_ddns_config(&self) -> errors::Result<DDNSConfig> {
use self::ddns_config::dsl::*;
let connection = self.get_connection();
let connection = connection.lock().unwrap();
let connection = connection.deref();
Ok(ddns_config
.select((host, username, password))
.get_result(connection)?)
}
}
#[derive(Debug)]
enum DDNSError {
InternalError(errors::Error),

View file

@ -1,7 +1,10 @@
use core::ops::Deref;
use diesel::prelude::*;
use std::collections::HashMap;
use std::path::PathBuf;
use std::path::Path;
use db::{ConnectionSource, DB};
use db::mount_points;
use errors::*;
@ -9,6 +12,23 @@ pub trait VFSSource {
fn get_vfs(&self) -> Result<VFS>;
}
impl VFSSource for DB {
fn get_vfs(&self) -> Result<VFS> {
use self::mount_points::dsl::*;
let mut vfs = VFS::new();
let connection = self.get_connection();
let connection = connection.lock().unwrap();
let connection = connection.deref();
let points: Vec<MountPoint> = mount_points
.select((source, name))
.get_results(connection)?;
for point in points {
vfs.mount(&Path::new(&point.source), &point.name)?;
}
Ok(vfs)
}
}
#[derive(Debug, Deserialize, Insertable, Queryable)]
#[table_name="mount_points"]
pub struct MountPoint {