use amqprs::{BasicProperties, Deliver, channel::{BasicAckArguments, Channel}, consumer::AsyncConsumer}; use async_trait::async_trait; use revolt_database::{Database, Message}; use revolt_search::ElasticsearchClient; pub struct MessageEditConsumer { client: ElasticsearchClient, database: Database } impl MessageEditConsumer { pub fn new(client: ElasticsearchClient, database: Database) -> Self { Self { client, database } } } #[async_trait] impl AsyncConsumer for MessageEditConsumer { async fn consume( &mut self, channel: &Channel, deliver: Deliver, _basic_properties: BasicProperties, content: Vec, ) { let message = serde_json::from_slice::(&content).expect("Failed to decode message"); log::debug!("Received edit message {message:?}"); if self.client.edit_message(&self.database, message).await.is_ok() { channel.basic_ack(BasicAckArguments::new(deliver.delivery_tag(), false)).await.expect("Failed to ack"); } else { // todo requeue } } }