1use super::*;
2
3pub struct Log<'a, T, R>
6where T: traits::Connection<R>,
7 R: traits::Row,
8{
9 conn: &'a mut T,
10 level: ::log::Level,
11 phantom_r: std::marker::PhantomData<R>,
12}
13
14impl<'a, T, R> Log<'a, T, R>
15where T: traits::Connection<R>,
16 R: traits::Row,
17{
18 pub fn from_connection_level(conn: &'a mut T, level: ::log::Level) -> Log<T, R> {
19 Log { conn, level, phantom_r: std::marker::PhantomData, }
20 }
21
22 pub fn inner_mut(&mut self) -> &mut T { &mut self.conn }
23
24 pub fn with_level(mut self, level: ::log::Level) -> Log<'a, T, R> {
25 self.level = level;
26 self
27 }
28
29 fn log(&self, statement: &str) {
30 match self.level {
31 ::log::Level::Error => ::log::error!("{statement}"),
32 ::log::Level::Warn => ::log::warn!("{statement}"),
33 ::log::Level::Info => ::log::info!("{statement}"),
34 ::log::Level::Debug => ::log::debug!("{statement}"),
35 ::log::Level::Trace => ::log::trace!("{statement}"),
36 }
37 }
38}
39
40impl<'a, T, R> std::convert::From<&'a mut T> for Log<'a, T, R>
41where T: traits::Connection<R>,
42 R: traits::Row,
43{
44 fn from(conn: &'a mut T) -> Self { Log { conn, level: ::log::Level::Info, phantom_r: std::marker::PhantomData, } }
45}
46
47impl<'a, T, R> traits::Connection<R> for Log<'a, T, R>
64where T: traits::Connection<R>,
65 R: traits::Row,
66{
67 fn flavor(&self) -> traits::Flavor { self.conn.flavor() }
68
69 fn execute_with_params<S, P>(&mut self, query: S, params: &P) -> Result<()>
70 where S: std::convert::AsRef<str>,
71 P: traits::Params,
72 {
73 self.log(query.as_ref());
74 self.conn.execute_with_params(query, params)
75 }
76
77 fn execute_with_params_iterator<'b, S, I, P>(&mut self, query: S, params_iter: I) -> Result<()>
78 where S: std::convert::AsRef<str>,
79 P: traits::Params + 'b,
80 I: core::iter::IntoIterator<Item = &'b P>
81 {
82 self.log(query.as_ref());
83 self.conn.execute_with_params_iterator(query, params_iter)
84 }
85
86fn query<S>(&mut self, query: S) -> Result<Vec<R>>
97 where S: std::convert::AsRef<str>,
98 {
99 self.log(query.as_ref());
100 self.conn.query(query)
101 }
102}
103