Skip to main content

r2d2_beanstalkd/
pool.rs

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}