/**
  * @param OutboxMessage $message
  *
  * @return array
  */
 public function toDatabaseArray(OutboxMessage $message)
 {
     $transportOperations = [];
     foreach ($message->getTransportOperations() as $transportOperation) {
         $transportOperations[] = ['message_id' => $transportOperation->getMessageId(), 'body' => $transportOperation->getBody(), 'headers' => $transportOperation->getHeaders(), 'options' => $transportOperation->getOptions()];
     }
     return ['message_id' => $message->getMessageId(), 'transport_operations' => json_encode($transportOperations)];
 }
 /**
  * @param OutboxMessage $outboxMessage
  *
  * @return PendingTransportOperations
  */
 public function convertToPendingTransportOperations(OutboxMessage $outboxMessage)
 {
     $transportOperations = new PendingTransportOperations();
     foreach ($outboxMessage->getTransportOperations() as $outboxOperation) {
         $transportOperations->add(new TransportOperation(new OutgoingPhysicalMessage($outboxOperation->getMessageId(), $outboxOperation->getHeaders(), $outboxOperation->getBody()), $this->deserializeAddressTag($outboxOperation->getOptions())));
     }
     return $transportOperations;
 }
 /**
  * Stores the message to enable deduplication and re-dispatching of transport operations.
  * Throws an exception if a message with the same ID already exists.
  *
  * @param OutboxMessage $message
  *
  * @return void
  */
 public function store(OutboxMessage $message)
 {
     $messageId = $message->getMessageId();
     if (isset($this->messages[$messageId])) {
         throw new InvalidArgumentException("Outbox message with ID '{$messageId}' already exists in storage.");
     }
     $this->messages[$messageId] = new InMemoryStoredMessage($messageId, $message->getTransportOperations());
     $this->lastMessageId = $messageId;
 }