use crate::GroupId;
use nostr::EventId;
pub mod error;
pub mod types;
use self::error::MessageError;
use self::types::*;
pub trait MessageStorage {
fn save_message(&self, message: Message) -> Result<(), MessageError>;
fn find_message_by_event_id(
&self,
mls_group_id: &GroupId,
event_id: &EventId,
) -> Result<Option<Message>, MessageError>;
fn save_processed_message(
&self,
processed_message: ProcessedMessage,
) -> Result<(), MessageError>;
fn find_processed_message_by_event_id(
&self,
event_id: &EventId,
) -> Result<Option<ProcessedMessage>, MessageError>;
fn invalidate_messages_after_epoch(
&self,
group_id: &GroupId,
epoch: u64,
) -> Result<Vec<EventId>, MessageError>;
fn invalidate_processed_messages_after_epoch(
&self,
group_id: &GroupId,
epoch: u64,
) -> Result<Vec<EventId>, MessageError>;
fn find_failed_messages_for_retry(
&self,
group_id: &GroupId,
) -> Result<Vec<EventId>, MessageError>;
fn find_invalidated_messages(&self, group_id: &GroupId) -> Result<Vec<Message>, MessageError>;
fn find_invalidated_processed_messages(
&self,
group_id: &GroupId,
) -> Result<Vec<ProcessedMessage>, MessageError>;
fn mark_processed_message_retryable(&self, event_id: &EventId) -> Result<(), MessageError>;
fn find_message_epoch_by_tag_content(
&self,
group_id: &GroupId,
content_substring: &str,
) -> Result<Option<u64>, MessageError>;
fn delete_messages_for_group(&self, group_id: &GroupId) -> Result<usize, MessageError>;
}