1
- use crate :: types:: ToSql ;
2
- use crate :: { Error , Row , Statement , ToStatement , Transaction } ;
1
+ use crate :: types:: { ToSql , Type } ;
2
+ use crate :: {
3
+ Client , CopyInWriter , CopyOutReader , Error , Row , RowIter , SimpleQueryMessage , Statement ,
4
+ ToStatement , Transaction ,
5
+ } ;
6
+
7
+ mod private {
8
+ pub trait Sealed { }
9
+ }
3
10
4
11
/// A trait allowing abstraction over connections and transactions.
5
- pub trait GenericClient {
12
+ ///
13
+ /// This trait is "sealed", and cannot be implemented outside of this crate.
14
+ pub trait GenericClient : private:: Sealed {
6
15
/// Like `Client::execute`.
7
16
fn execute < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < u64 , Error >
8
17
where
@@ -13,9 +22,207 @@ pub trait GenericClient {
13
22
where
14
23
T : ?Sized + ToStatement ;
15
24
25
+ /// Like `Client::query_one`.
26
+ fn query_one < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < Row , Error >
27
+ where
28
+ T : ?Sized + ToStatement ;
29
+
30
+ /// Like `Client::query_opt`.
31
+ fn query_opt < T > (
32
+ & mut self ,
33
+ query : & T ,
34
+ params : & [ & ( dyn ToSql + Sync ) ] ,
35
+ ) -> Result < Option < Row > , Error >
36
+ where
37
+ T : ?Sized + ToStatement ;
38
+
39
+ /// Like `Client::query_raw`.
40
+ fn query_raw < ' a , T , I > ( & mut self , query : & T , params : I ) -> Result < RowIter < ' _ > , Error >
41
+ where
42
+ T : ?Sized + ToStatement ,
43
+ I : IntoIterator < Item = & ' a dyn ToSql > ,
44
+ I :: IntoIter : ExactSizeIterator ;
45
+
16
46
/// Like `Client::prepare`.
17
47
fn prepare ( & mut self , query : & str ) -> Result < Statement , Error > ;
18
48
49
+ /// Like `Client::prepare_typed`.
50
+ fn prepare_typed ( & mut self , query : & str , types : & [ Type ] ) -> Result < Statement , Error > ;
51
+
52
+ /// Like `Client::copy_in`.
53
+ fn copy_in < T > ( & mut self , query : & T ) -> Result < CopyInWriter < ' _ > , Error >
54
+ where
55
+ T : ?Sized + ToStatement ;
56
+
57
+ /// Like `Client::copy_out`.
58
+ fn copy_out < T > ( & mut self , query : & T ) -> Result < CopyOutReader < ' _ > , Error >
59
+ where
60
+ T : ?Sized + ToStatement ;
61
+
62
+ /// Like `Client::simple_query`.
63
+ fn simple_query ( & mut self , query : & str ) -> Result < Vec < SimpleQueryMessage > , Error > ;
64
+
65
+ /// Like `Client::batch_execute`.
66
+ fn batch_execute ( & mut self , query : & str ) -> Result < ( ) , Error > ;
67
+
19
68
/// Like `Client::transaction`.
20
69
fn transaction ( & mut self ) -> Result < Transaction < ' _ > , Error > ;
21
70
}
71
+
72
+ impl private:: Sealed for Client { }
73
+
74
+ impl GenericClient for Client {
75
+ fn execute < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < u64 , Error >
76
+ where
77
+ T : ?Sized + ToStatement ,
78
+ {
79
+ self . execute ( query, params)
80
+ }
81
+
82
+ fn query < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < Vec < Row > , Error >
83
+ where
84
+ T : ?Sized + ToStatement ,
85
+ {
86
+ self . query ( query, params)
87
+ }
88
+
89
+ fn query_one < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < Row , Error >
90
+ where
91
+ T : ?Sized + ToStatement ,
92
+ {
93
+ self . query_one ( query, params)
94
+ }
95
+
96
+ fn query_opt < T > (
97
+ & mut self ,
98
+ query : & T ,
99
+ params : & [ & ( dyn ToSql + Sync ) ] ,
100
+ ) -> Result < Option < Row > , Error >
101
+ where
102
+ T : ?Sized + ToStatement ,
103
+ {
104
+ self . query_opt ( query, params)
105
+ }
106
+
107
+ fn query_raw < ' a , T , I > ( & mut self , query : & T , params : I ) -> Result < RowIter < ' _ > , Error >
108
+ where
109
+ T : ?Sized + ToStatement ,
110
+ I : IntoIterator < Item = & ' a dyn ToSql > ,
111
+ I :: IntoIter : ExactSizeIterator ,
112
+ {
113
+ self . query_raw ( query, params)
114
+ }
115
+
116
+ fn prepare ( & mut self , query : & str ) -> Result < Statement , Error > {
117
+ self . prepare ( query)
118
+ }
119
+
120
+ fn prepare_typed ( & mut self , query : & str , types : & [ Type ] ) -> Result < Statement , Error > {
121
+ self . prepare_typed ( query, types)
122
+ }
123
+
124
+ fn copy_in < T > ( & mut self , query : & T ) -> Result < CopyInWriter < ' _ > , Error >
125
+ where
126
+ T : ?Sized + ToStatement ,
127
+ {
128
+ self . copy_in ( query)
129
+ }
130
+
131
+ fn copy_out < T > ( & mut self , query : & T ) -> Result < CopyOutReader < ' _ > , Error >
132
+ where
133
+ T : ?Sized + ToStatement ,
134
+ {
135
+ self . copy_out ( query)
136
+ }
137
+
138
+ fn simple_query ( & mut self , query : & str ) -> Result < Vec < SimpleQueryMessage > , Error > {
139
+ self . simple_query ( query)
140
+ }
141
+
142
+ fn batch_execute ( & mut self , query : & str ) -> Result < ( ) , Error > {
143
+ self . batch_execute ( query)
144
+ }
145
+
146
+ fn transaction ( & mut self ) -> Result < Transaction < ' _ > , Error > {
147
+ self . transaction ( )
148
+ }
149
+ }
150
+
151
+ impl private:: Sealed for Transaction < ' _ > { }
152
+
153
+ impl GenericClient for Transaction < ' _ > {
154
+ fn execute < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < u64 , Error >
155
+ where
156
+ T : ?Sized + ToStatement ,
157
+ {
158
+ self . execute ( query, params)
159
+ }
160
+
161
+ fn query < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < Vec < Row > , Error >
162
+ where
163
+ T : ?Sized + ToStatement ,
164
+ {
165
+ self . query ( query, params)
166
+ }
167
+
168
+ fn query_one < T > ( & mut self , query : & T , params : & [ & ( dyn ToSql + Sync ) ] ) -> Result < Row , Error >
169
+ where
170
+ T : ?Sized + ToStatement ,
171
+ {
172
+ self . query_one ( query, params)
173
+ }
174
+
175
+ fn query_opt < T > (
176
+ & mut self ,
177
+ query : & T ,
178
+ params : & [ & ( dyn ToSql + Sync ) ] ,
179
+ ) -> Result < Option < Row > , Error >
180
+ where
181
+ T : ?Sized + ToStatement ,
182
+ {
183
+ self . query_opt ( query, params)
184
+ }
185
+
186
+ fn query_raw < ' a , T , I > ( & mut self , query : & T , params : I ) -> Result < RowIter < ' _ > , Error >
187
+ where
188
+ T : ?Sized + ToStatement ,
189
+ I : IntoIterator < Item = & ' a dyn ToSql > ,
190
+ I :: IntoIter : ExactSizeIterator ,
191
+ {
192
+ self . query_raw ( query, params)
193
+ }
194
+
195
+ fn prepare ( & mut self , query : & str ) -> Result < Statement , Error > {
196
+ self . prepare ( query)
197
+ }
198
+
199
+ fn prepare_typed ( & mut self , query : & str , types : & [ Type ] ) -> Result < Statement , Error > {
200
+ self . prepare_typed ( query, types)
201
+ }
202
+
203
+ fn copy_in < T > ( & mut self , query : & T ) -> Result < CopyInWriter < ' _ > , Error >
204
+ where
205
+ T : ?Sized + ToStatement ,
206
+ {
207
+ self . copy_in ( query)
208
+ }
209
+
210
+ fn copy_out < T > ( & mut self , query : & T ) -> Result < CopyOutReader < ' _ > , Error >
211
+ where
212
+ T : ?Sized + ToStatement ,
213
+ {
214
+ self . copy_out ( query)
215
+ }
216
+
217
+ fn simple_query ( & mut self , query : & str ) -> Result < Vec < SimpleQueryMessage > , Error > {
218
+ self . simple_query ( query)
219
+ }
220
+
221
+ fn batch_execute ( & mut self , query : & str ) -> Result < ( ) , Error > {
222
+ self . batch_execute ( query)
223
+ }
224
+
225
+ fn transaction ( & mut self ) -> Result < Transaction < ' _ > , Error > {
226
+ self . transaction ( )
227
+ }
228
+ }
0 commit comments