1use beanstalkc::{Beanstalkc, BeanstalkcError};
2use r2d2;
3use std::result::Result;
4use std::time;
5
6#[derive(Clone, Debug)]
7pub struct BeanstalkdConnectionManager {
8 host: String,
9 port: u16,
10}
11
12impl BeanstalkdConnectionManager {
13 pub fn new<S: Into<String>>(host: S, port: u16) -> BeanstalkdConnectionManager {
14 BeanstalkdConnectionManager {
15 host: host.into(),
16 port,
17 }
18 }
19}
20
21impl r2d2::ManageConnection for BeanstalkdConnectionManager {
22 type Connection = Beanstalkc;
23 type Error = BeanstalkcError;
24
25 fn connect(&self) -> Result<Beanstalkc, BeanstalkcError> {
26 Beanstalkc::new()
27 .host(&self.host)
28 .port(self.port)
29 .connection_timeout(Some(time::Duration::from_secs(10)))
30 .connect()
31 }
32
33 fn is_valid(&self, conn: &mut Beanstalkc) -> Result<(), BeanstalkcError> {
34 conn.tubes().map(|_| ())
35 }
36
37 fn has_broken(&self, conn: &mut Beanstalkc) -> bool {
38 conn.tubes().is_err()
39 }
40}