Perform db action inline

This commit is contained in:
asonix 2020-03-18 13:25:43 -05:00
parent cdef00f844
commit 4c373e562b
3 changed files with 17 additions and 16 deletions

View file

@ -45,34 +45,32 @@ impl Db {
Ok(self.actor.send(DbQuery(f)).await?.await?)
}
pub fn remove_listener(&self, inbox: XsdAnyUri) {
self.actor.do_send(DbQuery(move |pool: Pool| {
pub async fn remove_listener(&self, inbox: XsdAnyUri) -> Result<(), MyError> {
self.execute_inline(move |pool: Pool| {
let inbox = inbox.clone();
async move {
let conn = pool.get().await?;
remove_listener(&conn, &inbox).await.map_err(|e| {
error!("Error removing listener, {}", e);
e
})
remove_listener(&conn, &inbox).await
}
}));
})
.await?
.map_err(MyError::from)
}
pub fn add_listener(&self, inbox: XsdAnyUri) {
self.actor.do_send(DbQuery(move |pool: Pool| {
pub async fn add_listener(&self, inbox: XsdAnyUri) -> Result<(), MyError> {
self.execute_inline(move |pool: Pool| {
let inbox = inbox.clone();
async move {
let conn = pool.get().await?;
add_listener(&conn, &inbox).await.map_err(|e| {
error!("Error adding listener, {}", e);
e
})
add_listener(&conn, &inbox).await
}
}));
})
.await?
.map_err(MyError::from)
}
}

View file

@ -8,6 +8,9 @@ use tokio::sync::oneshot::error::RecvError;
#[derive(Debug, thiserror::Error)]
pub enum MyError {
#[error("Error in db, {0}")]
DbError(#[from] anyhow::Error),
#[error("Couldn't parse key, {0}")]
Key(#[from] KeyError),

View file

@ -100,7 +100,7 @@ async fn handle_undo(
}
let inbox = actor.inbox().to_owned();
db.remove_listener(inbox);
db.remove_listener(inbox).await?;
let undo = generate_undo_follow(state, &actor.id, &my_id)?;
@ -169,7 +169,7 @@ async fn handle_follow(
let follow = generate_follow(state, &actor.id, &my_id)?;
let inbox = actor.inbox().to_owned();
db.add_listener(inbox);
db.add_listener(inbox).await?;
let client2 = client.clone();
let inbox = actor.inbox().clone();