use connection::{ConnectionInfo, IntoConnectionInfo, Connection, connect,
PubSub, connect_pubsub, ConnectionLike};
use types::{RedisResult, Value};
#[derive(Debug, Clone)]
pub struct Client {
connection_info: ConnectionInfo,
}
impl Client {
pub fn open<T: IntoConnectionInfo>(params: T) -> RedisResult<Client> {
Ok(Client {
connection_info: try!(params.into_connection_info())
})
}
pub fn get_connection(&self) -> RedisResult<Connection> {
Ok(try!(connect(&self.connection_info)))
}
pub fn get_pubsub(&self) -> RedisResult<PubSub> {
Ok(try!(connect_pubsub(&self.connection_info)))
}
}
impl ConnectionLike for Client {
fn req_packed_command(&self, cmd: &[u8]) -> RedisResult<Value> {
try!(self.get_connection()).req_packed_command(cmd)
}
fn req_packed_commands(&self, cmd: &[u8],
offset: usize, count: usize) -> RedisResult<Vec<Value>> {
try!(self.get_connection()).req_packed_commands(cmd, offset, count)
}
fn get_db(&self) -> i64 {
self.connection_info.db
}
}