summaryrefslogtreecommitdiffstats
path: root/src/plugins/tell/database.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/tell/database.rs')
-rw-r--r--src/plugins/tell/database.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/plugins/tell/database.rs b/src/plugins/tell/database.rs
index 40ec6fc..98e9fb3 100644
--- a/src/plugins/tell/database.rs
+++ b/src/plugins/tell/database.rs
@@ -43,6 +43,7 @@ pub struct NewTellMessage<'a> {
pub trait Database: Send {
fn insert_tell(&mut self, tell: &NewTellMessage) -> Result<(), TellError>;
fn get_tells(&self, receiver: &str) -> Result<Vec<TellMessage>, TellError>;
+ fn get_receivers(&self) -> Result<Vec<String>, TellError>;
fn delete_tells(&mut self, receiver: &str) -> Result<(), TellError>;
}
@@ -69,6 +70,12 @@ impl Database for HashMap<String, Vec<TellMessage>> {
Ok(self.get(receiver).cloned().ok_or(ErrorKind::NotFound)?)
}
+ fn get_receivers(&self) -> Result<Vec<String>, TellError> {
+ Ok(self.iter()
+ .map(|(receiver, _)| receiver.to_owned())
+ .collect::<Vec<_>>())
+ }
+
fn delete_tells(&mut self, receiver: &str) -> Result<(), TellError> {
match self.remove(receiver) {
Some(_) => Ok(()),
@@ -120,6 +127,16 @@ impl Database for Arc<Pool<ConnectionManager<MysqlConnection>>> {
.context(ErrorKind::MysqlError)?)
}
+ fn get_receivers(&self) -> Result<Vec<String>, TellError> {
+ use self::tells::columns;
+
+ let conn = &*self.get().context(ErrorKind::NoConnection)?;
+ Ok(tells::table
+ .select(columns::receiver)
+ .load::<String>(conn)
+ .context(ErrorKind::MysqlError)?)
+ }
+
fn delete_tells(&mut self, receiver: &str) -> Result<(), TellError> {
use diesel;
use self::tells::columns;