use super::Client;
use crate::Error;
use crate::QueueDetails;
use crate::queue::Queue;
use sqlx::types::Json;
use std::borrow::Borrow;
impl Client {
pub async fn create_queue<'a, Q>(&self, queue: Q) -> Result<(), Error>
where
Q: Borrow<Queue<'a>>,
{
let q = queue.borrow();
Ok(sqlx::query(&self.stmt.create_queue)
.bind(q.name)
.bind(Json(q.opts()))
.execute(&self.pool)
.await
.map(|_| ())?)
}
pub async fn create_standard_queue<Q>(&self, name: Q) -> Result<(), Error>
where
Q: AsRef<str>,
{
let q_opts = Queue::builder().name(name.as_ref()).build();
self.create_queue(q_opts).await
}
pub async fn get_queue<Q>(&self, queue_name: Q) -> Result<Option<QueueDetails>, Error>
where
Q: AsRef<str>,
{
let queue: Option<QueueDetails> = sqlx::query_as(&self.stmt.get_queue)
.bind(queue_name.as_ref())
.fetch_optional(&self.pool)
.await?;
Ok(queue)
}
pub async fn get_all_queues(&self) -> Result<Vec<QueueDetails>, Error> {
let queues: Vec<QueueDetails> = sqlx::query_as(&self.stmt.get_all_queues)
.fetch_all(&self.pool)
.await?;
Ok(queues)
}
pub async fn delete_queue<Q>(&self, queue_name: Q) -> Result<(), Error>
where
Q: AsRef<str>,
{
Ok(sqlx::query(&self.stmt.delete_queue)
.bind(queue_name.as_ref())
.execute(&self.pool)
.await
.map(|_| ())?)
}
}