sqlite_collections/db/
savepointable.rs

1use rusqlite::{Connection, Result, Savepoint, Transaction};
2
3/// Types that can make a savepoint.
4/// This is necessary because savepoint methods take a &mut, but none of the
5// types impl DerefMut for Connection.
6pub trait Savepointable {
7    fn savepoint(&mut self) -> Result<Savepoint<'_>>;
8}
9
10impl Savepointable for Connection {
11    #[inline]
12    fn savepoint(&mut self) -> Result<Savepoint<'_>> {
13        Connection::savepoint(self)
14    }
15}
16
17impl Savepointable for Transaction<'_> {
18    #[inline]
19    fn savepoint(&mut self) -> Result<Savepoint<'_>> {
20        Transaction::savepoint(self)
21    }
22}
23
24impl Savepointable for Savepoint<'_> {
25    #[inline]
26    fn savepoint(&mut self) -> Result<Savepoint<'_>> {
27        Savepoint::savepoint(self)
28    }
29}
30
31impl Savepointable for &mut Connection {
32    #[inline]
33    fn savepoint(&mut self) -> Result<Savepoint<'_>> {
34        Connection::savepoint(*self)
35    }
36}
37
38impl Savepointable for &mut Transaction<'_> {
39    #[inline]
40    fn savepoint(&mut self) -> Result<Savepoint<'_>> {
41        Transaction::savepoint(*self)
42    }
43}
44
45impl Savepointable for &mut Savepoint<'_> {
46    #[inline]
47    fn savepoint(&mut self) -> Result<Savepoint<'_>> {
48        Savepoint::savepoint(*self)
49    }
50}