func deliver()

in FishyTransport/Sources/FishyActorTransport/FishyTransport.swift [247:282]


  func deliver(envelope: Envelope) async throws -> Data {
    var baggage = Baggage.current ?? .topLevel
    InstrumentationSystem.instrument.extract(
        envelope.metadata,
        into: &baggage,
        using: MessageEnvelopeMetadataExtractor()
    )

    return try await Baggage.$current.withValue(baggage) {
      log.debug("Deliver to \(envelope.recipient)")

      guard let known = resolveRecipient(of: envelope) else {
        throw handleDeadLetter(envelope)
      }

      log.debug("Delivering to local instance: \(known)", metadata: [
        "envelope": "\(envelope)",
        "recipient": "\(known)",
      ])

      // In a real implementation coders would often be configurable on transport level.
      //
      // The transport must ensure to store itself in the user info offered to receive
      // as it may need to attempt to decode actor references.
      let encoder = JSONEncoder()
      let decoder = JSONDecoder()
      encoder.userInfo[.actorTransportKey] = self
      decoder.userInfo[.actorTransportKey] = self

      do {
        return try await known._receiveAny(envelope: envelope, encoder: encoder, decoder: decoder)
      } catch {
        fatalError("Failed to deliver: \(error)")
      }
    }
  }