mod models;
mod operations;
mod schema;
use diesel::r2d2::{ConnectionManager, Pool};
use super::error::NodeIdStoreError;
use super::NodeIdStore;
use models::NodeID;
use operations::{
get_node_id::NodeIdGetOperation, set_node_id::NodeIdSetOperation, NodeIdOperations,
};
pub struct DieselNodeIdStore<Conn: diesel::Connection + 'static> {
pool: Pool<ConnectionManager<Conn>>,
}
impl<C: diesel::Connection> DieselNodeIdStore<C> {
pub fn new(pool: Pool<ConnectionManager<C>>) -> Self {
Self { pool }
}
}
#[cfg(feature = "postgres")]
impl NodeIdStore for DieselNodeIdStore<diesel::pg::PgConnection> {
fn get_node_id(&self) -> Result<Option<String>, NodeIdStoreError> {
NodeIdOperations::new(&*self.pool.get()?).get_node_id()
}
fn set_node_id(&self, new_id: String) -> Result<(), NodeIdStoreError> {
NodeIdOperations::new(&*self.pool.get()?).set_node_id(new_id)
}
}
#[cfg(feature = "sqlite")]
impl NodeIdStore for DieselNodeIdStore<diesel::sqlite::SqliteConnection> {
fn get_node_id(&self) -> Result<Option<String>, NodeIdStoreError> {
NodeIdOperations::new(&*self.pool.get()?).get_node_id()
}
fn set_node_id(&self, new_id: String) -> Result<(), NodeIdStoreError> {
NodeIdOperations::new(&*self.pool.get()?).set_node_id(new_id)
}
}