pub async fn sqs_service<Err, S3T, SqsT, EventT, CompletedEventT, EventDecoderT, EventEncoderT, EventHandlerT, CacheT, OnAck, EmissionResult, OnEmission>(
queue_url: impl Into<String>,
dest_bucket: impl Into<String>,
ctx: Context,
s3_client: S3T,
sqs_client: SqsT,
event_decoder: EventDecoderT,
event_encoder: EventEncoderT,
event_handler: EventHandlerT,
cache: CacheT,
on_ack: OnAck,
on_emit: OnEmission
) -> Result<(), Box<dyn Error>> where
Err: Debug + Clone + Send + Sync + 'static,
S3T: S3 + Clone + Send + Sync + 'static,
SqsT: Sqs + Clone + Send + Sync + 'static,
CompletedEventT: Clone + Send + Sync + 'static,
EventT: Clone + Send + Sync + 'static,
EventDecoderT: PayloadDecoder<EventT> + Clone + Send + Sync + 'static,
EventEncoderT: CompletionEventSerializer<CompletedEvent = CompletedEventT, Output = Vec<u8>, Error = <EventHandlerT as EventHandler>::Error> + Clone + Send + Sync + 'static,
EventHandlerT: EventHandler<InputEvent = EventT, OutputEvent = CompletedEventT, Error = Error<Err>> + Clone + Send + Sync + 'static,
CacheT: Cache<<EventHandlerT as EventHandler>::Error> + Clone + Send + Sync + 'static,
OnAck: Fn(SqsCompletionHandlerActor<CompletedEventT, <EventHandlerT as EventHandler>::Error, SqsT>, Result<String, String>) + Send + Sync + 'static,
OnEmission: Fn(String, String) -> EmissionResult + Send + Sync + 'static,
EmissionResult: Future<Output = Result<(), Box<dyn Error + Send + Sync + 'static>>> + Send + 'static,