Skip to content

Commit 1ac5518

Browse files
committed
More frontend changes
1 parent f681a33 commit 1ac5518

File tree

1 file changed

+40
-74
lines changed

1 file changed

+40
-74
lines changed

src/message/frontend.rs

Lines changed: 40 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -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

9894
pub 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

104103
pub 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

229195
pub struct Sync;

0 commit comments

Comments
 (0)