use crate::{sealed::Sealed, CreateMessageBatchOptions, ServiceBusMessage};
use super::TransportMessageBatch;
#[cfg(docsrs)]
use crate::ServiceBusSender;
pub(crate) trait TransportSender: Sealed {
type SendError: std::error::Error + Send;
type ScheduleError: std::error::Error + Send;
type CloseError: std::error::Error + Send;
type CreateMessageBatchError: std::error::Error + Send;
type MessageBatch: TransportMessageBatch + Send;
fn entity_path(&self) -> &str;
fn identifier(&self) -> &str;
fn create_message_batch(
&self,
options: CreateMessageBatchOptions,
) -> Result<Self::MessageBatch, Self::CreateMessageBatchError>;
async fn send(
&mut self,
messages: impl ExactSizeIterator<Item = ServiceBusMessage> + Send,
) -> Result<(), Self::SendError>;
async fn send_batch(
&mut self,
message_batch: Self::MessageBatch,
) -> Result<(), Self::SendError>;
async fn schedule_messages(
&mut self,
messages: impl Iterator<Item = ServiceBusMessage> + Send,
) -> Result<Vec<i64>, Self::ScheduleError>;
async fn cancel_scheduled_messages(
&mut self,
sequence_numbers: Vec<i64>,
) -> Result<(), Self::ScheduleError>;
async fn close(self) -> Result<(), Self::CloseError>;
}