use Bucket;
use CouchbaseError;
use connstr::ConnectionString;
pub struct Cluster<'a> {
connstr: &'a str,
username: Option<&'a str>,
password: Option<&'a str>,
}
impl<'a> Cluster<'a> {
pub fn new(connstr: &'a str) -> Result<Self, CouchbaseError> {
Ok(Cluster {
connstr: connstr,
username: None,
password: None,
})
}
pub fn authenticate(&mut self, username: &'a str, password: &'a str) {
self.username = Some(username);
self.password = Some(password);
}
pub fn open_bucket(
&self,
name: &'a str,
password: Option<&'a str>,
) -> Result<Bucket, CouchbaseError> {
let connstr = ConnectionString::new(self.connstr)?;
match self.username {
Some(user) => {
if password.is_some() {
panic!("Either username & password or a bucket password, but not both!");
}
Bucket::new(&connstr.export(name), self.password.unwrap(), Some(user))
}
None => {
Bucket::new(&connstr.export(name), password.unwrap_or(""), None)
}
}
}
}