1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use rusqlite::Connection;
use crate::entities::errors::DbResult;
pub trait IConnection {
fn with<T, F: FnOnce(&Connection) -> DbResult<T>>(&self, fun: F) -> DbResult<T>;
}
impl IConnection for Connection {
fn with<T, F: FnOnce(&Connection) -> DbResult<T>>(&self, fun: F) -> DbResult<T> {
fun(self)
}
}
impl<Cnn: IConnection> IConnection for &Cnn {
fn with<T, F: FnOnce(&Connection) -> DbResult<T>>(&self, fun: F) -> DbResult<T> {
(*self).with(fun)
}
}
pub trait INewDbRepo<Connection> {
fn create(connect: Connection) -> Self;
}
pub trait IDbRepo {
fn as_super(&self) -> &dyn IDbRepo {
unimplemented!()
}
fn init(&self) -> DbResult<()> {
self.as_super().init()
}
fn recreate_tables(&self) -> DbResult<()> {
self.drop()?;
self.init()
}
fn drop(&self) -> DbResult<()> {
self.as_super().drop()
}
fn set_indexes(&self) -> DbResult<()> {
self.as_super().set_indexes()
}
fn drop_indexes(&self) -> DbResult<()> {
self.as_super().drop_indexes()
}
fn get_size(&self) -> DbResult<usize> {
self.as_super().get_size()
}
}