@@ -57,15 +57,11 @@ pub fn bind<I, J, F, T, K>(portal: &str,
5757 write_body ( buf, |buf| {
5858 try!( buf. write_cstr ( portal) ) ;
5959 try!( buf. write_cstr ( statement) ) ;
60- try!( write_counted ( formats,
61- |f, buf| Ok :: < ( ) , io:: Error > ( buf. write_i16 :: < BigEndian > ( f) . unwrap ( ) ) ,
62- buf) ) ;
60+ try!( write_counted ( formats, |f, buf| buf. write_i16 :: < BigEndian > ( f) , buf) ) ;
6361 try!( write_counted ( values,
6462 |v, buf| write_nullable ( |buf| serializer ( v, buf) , buf) ,
6563 buf) ) ;
66- try!( write_counted ( result_formats,
67- |f, buf| Ok :: < ( ) , io:: Error > ( buf. write_i16 :: < BigEndian > ( f) . unwrap ( ) ) ,
68- buf) ) ;
64+ try!( write_counted ( result_formats, |f, buf| buf. write_i16 :: < BigEndian > ( f) , buf) ) ;
6965
7066 Ok ( ( ) )
7167 } )
@@ -96,9 +92,12 @@ pub trait Message {
9692}
9793
9894pub fn cancel_request ( process_id : i32 , secret_key : i32 , buf : & mut Vec < u8 > ) {
99- buf. write_i32 :: < BigEndian > ( 80877102 ) . unwrap ( ) ;
100- buf. write_i32 :: < BigEndian > ( process_id) . unwrap ( ) ;
101- buf. write_i32 :: < BigEndian > ( secret_key) . unwrap ( ) ;
95+ write_body ( buf, |buf| {
96+ buf. write_i32 :: < BigEndian > ( 80877102 ) . unwrap ( ) ;
97+ buf. write_i32 :: < BigEndian > ( process_id) . unwrap ( ) ;
98+ buf. write_i32 :: < BigEndian > ( secret_key) . unwrap ( ) ;
99+ Ok :: < ( ) , io:: Error > ( ( ) )
100+ } ) . unwrap ( ) ;
102101}
103102
104103pub fn close ( variant : u8 , name : & str , buf : & mut Vec < u8 > ) -> io:: Result < ( ) > {
@@ -150,80 +149,47 @@ pub fn execute(portal: &str, max_rows: i32, buf: &mut Vec<u8>) -> io::Result<()>
150149 } )
151150}
152151
153- pub struct Parse < ' a > {
154- pub name : & ' a str ,
155- pub query : & ' a str ,
156- pub param_types : & ' a [ Oid ] ,
157- }
158-
159- impl < ' a > Message for Parse < ' a > {
160- fn write ( & self , buf : & mut Vec < u8 > ) -> Result < ( ) , io:: Error > {
161- buf. push ( b'P' ) ;
162- write_body ( buf, |buf| {
163- try!( buf. write_cstr ( self . name ) ) ;
164- try!( buf. write_cstr ( self . query ) ) ;
165- let num_param_types = try!( i16:: from_usize ( self . param_types . len ( ) ) ) ;
166- try!( buf. write_i16 :: < BigEndian > ( num_param_types) ) ;
167- for & param_type in self . param_types {
168- try!( buf. write_u32 :: < BigEndian > ( param_type) ) ;
169- }
170- Ok ( ( ) )
171- } )
172- }
173- }
174-
175- pub struct PasswordMessage < ' a > {
176- pub password : & ' a str ,
177- }
178-
179- impl < ' a > Message for PasswordMessage < ' a > {
180- fn write ( & self , buf : & mut Vec < u8 > ) -> Result < ( ) , io:: Error > {
181- buf. push ( b'p' ) ;
182- write_body ( buf, |buf| buf. write_cstr ( self . password ) )
183- }
184- }
185-
186- pub struct Query < ' a > {
187- pub query : & ' a str ,
152+ pub fn parse < I > ( name : & str , query : & str , param_types : I , buf : & mut Vec < u8 > ) -> io:: Result < ( ) >
153+ where I : IntoIterator < Item = Oid >
154+ {
155+ buf. push ( b'P' ) ;
156+ write_body ( buf, |buf| {
157+ try!( buf. write_cstr ( name) ) ;
158+ try!( buf. write_cstr ( query) ) ;
159+ try!( write_counted ( param_types, |t, buf| buf. write_u32 :: < BigEndian > ( t) , buf) ) ;
160+ Ok ( ( ) )
161+ } )
188162}
189163
190- impl < ' a > Message for Query < ' a > {
191- fn write ( & self , buf : & mut Vec < u8 > ) -> Result < ( ) , io:: Error > {
192- buf. push ( b'Q' ) ;
193- write_body ( buf, |buf| buf. write_cstr ( self . query ) )
194- }
164+ pub fn password_message ( password : & str , buf : & mut Vec < u8 > ) -> io:: Result < ( ) > {
165+ buf. push ( b'p' ) ;
166+ write_body ( buf, |buf| buf. write_cstr ( password) )
195167}
196168
197- pub struct SslRequest ;
198-
199- impl Message for SslRequest {
200- fn write ( & self , buf : & mut Vec < u8 > ) -> Result < ( ) , io:: Error > {
201- write_body ( buf, |buf| {
202- try!( buf. write_i32 :: < BigEndian > ( 80877103 ) ) ;
203- Ok ( ( ) )
204- } )
205- }
169+ pub fn query ( query : & str , buf : & mut Vec < u8 > ) -> io:: Result < ( ) > {
170+ buf. push ( b'Q' ) ;
171+ write_body ( buf, |buf| buf. write_cstr ( query) )
206172}
207173
208- pub struct StartupMessage < ' a , T : ' a , U : ' a > {
209- pub parameters : & ' a [ ( T , U ) ] ,
174+ pub fn ssl_request ( buf : & mut Vec < u8 > ) {
175+ write_body ( buf, |buf| {
176+ buf. write_i32 :: < BigEndian > ( 80877103 ) . unwrap ( ) ;
177+ Ok :: < ( ) , io:: Error > ( ( ) )
178+ } ) . unwrap ( ) ;
210179}
211180
212- impl < ' a , T , U > Message for StartupMessage < ' a , T , U >
213- where T : AsRef < str > ,
214- U : AsRef < str >
181+ pub fn startup_message < ' a , I > ( parameters : I , buf : & mut Vec < u8 > ) -> io:: Result < ( ) >
182+ where I : IntoIterator < Item = ( & ' a str , & ' a str ) >
215183{
216- fn write ( & self , buf : & mut Vec < u8 > ) -> Result < ( ) , io:: Error > {
217- write_body ( buf, |buf| {
218- try!( buf. write_i32 :: < BigEndian > ( 196608 ) ) ;
219- for & ( ref key, ref value) in self . parameters {
220- try!( buf. write_cstr ( key. as_ref ( ) ) ) ;
221- try!( buf. write_cstr ( value. as_ref ( ) ) ) ;
222- }
223- buf. push ( 0 ) ;
224- Ok ( ( ) )
225- } )
226- }
184+ write_body ( buf, |buf| {
185+ buf. write_i32 :: < BigEndian > ( 196608 ) . unwrap ( ) ;
186+ for ( key, value) in parameters {
187+ try!( buf. write_cstr ( key. as_ref ( ) ) ) ;
188+ try!( buf. write_cstr ( value. as_ref ( ) ) ) ;
189+ }
190+ buf. push ( 0 ) ;
191+ Ok ( ( ) )
192+ } )
227193}
228194
229195pub struct Sync ;
0 commit comments