3
3
use fallible_iterator:: { FallibleIterator , IntoFallibleIterator } ;
4
4
use std:: fmt;
5
5
use std:: time:: Duration ;
6
- use postgres_protocol:: message:: backend;
6
+ use postgres_protocol:: message:: backend:: { self , ErrorFields } ;
7
+ use error:: DbError ;
7
8
8
9
#[ doc( inline) ]
10
+ use postgres_shared;
9
11
pub use postgres_shared:: Notification ;
10
12
11
13
use { desynchronized, Result , Connection } ;
@@ -110,6 +112,7 @@ impl<'a> FallibleIterator for Iter<'a> {
110
112
payload : body. message ( ) ?. to_owned ( ) ,
111
113
} ) )
112
114
}
115
+ Ok ( Some ( backend:: Message :: ErrorResponse ( body) ) ) => Err ( err ( & mut body. fields ( ) ) ) ,
113
116
Ok ( None ) => Ok ( None ) ,
114
117
Err ( err) => Err ( err. into ( ) ) ,
115
118
_ => unreachable ! ( ) ,
@@ -149,6 +152,7 @@ impl<'a> FallibleIterator for BlockingIter<'a> {
149
152
payload : body. message ( ) ?. to_owned ( ) ,
150
153
} ) )
151
154
}
155
+ Ok ( backend:: Message :: ErrorResponse ( body) ) => Err ( err ( & mut body. fields ( ) ) ) ,
152
156
Err ( err) => Err ( err. into ( ) ) ,
153
157
_ => unreachable ! ( ) ,
154
158
}
@@ -185,6 +189,7 @@ impl<'a> FallibleIterator for TimeoutIter<'a> {
185
189
payload : body. message ( ) ?. to_owned ( ) ,
186
190
} ) )
187
191
}
192
+ Ok ( Some ( backend:: Message :: ErrorResponse ( body) ) ) => Err ( err ( & mut body. fields ( ) ) ) ,
188
193
Ok ( None ) => Ok ( None ) ,
189
194
Err ( err) => Err ( err. into ( ) ) ,
190
195
_ => unreachable ! ( ) ,
@@ -195,3 +200,10 @@ impl<'a> FallibleIterator for TimeoutIter<'a> {
195
200
( self . conn . 0 . borrow ( ) . notifications . len ( ) , None )
196
201
}
197
202
}
203
+
204
+ fn err ( fields : & mut ErrorFields ) -> Error {
205
+ match DbError :: new ( fields) {
206
+ Ok ( err) => postgres_shared:: error:: db ( err) ,
207
+ Err ( err) => err. into ( ) ,
208
+ }
209
+ }
0 commit comments