All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.message.BackendMessage.scala Maven / Gradle / Ivy

// Copyright (c) 2018-2021 by Rob Norris
// This software is licensed under the MIT License (MIT).
// For more information see LICENSE or https://opensource.org/licenses/MIT

package skunk.net.message

import scala.annotation.switch
import scodec.Decoder

/**
 * Family of messages that are received from the server (the "back end"). These messages all consist
 * of a leading tag and a length-prefixed payload. This is an open hierarchy because I don't like
 * the aesthetics of a 52-case ADT. We may revisit this but it's ok for now.
 */
trait BackendMessage

object BackendMessage {

  /**
   * Return the [un-prefixed] payload decoder for the given message tag. If the tag is unknown the
   * payload will be decoded as an `UnknownMessage`.
   */
  def decoder(tag: Byte): Decoder[BackendMessage] =
    (tag: @switch) match { // N.B. `final val Tag = ` req'd for case switch here
       case AuthenticationRequest.Tag => AuthenticationRequest.decoder
       case BackendKeyData.Tag        => BackendKeyData.decoder
       case BindComplete.Tag          => BindComplete.decoder
       case CloseComplete.Tag         => CloseComplete.decoder
       case CommandComplete.Tag       => CommandComplete.decoder
       case CopyData.Tag              => CopyData.decoder
       case CopyDone.Tag              => CopyDone.decoder
       case CopyInResponse.Tag        => CopyInResponse.decoder
       case CopyOutResponse.Tag       => CopyOutResponse.decoder
       case EmptyQueryResponse.Tag    => EmptyQueryResponse.decoder
       case ErrorResponse.Tag         => ErrorResponse.decoder
       case NoData.Tag                => NoData.decoder
       case NotificationResponse.Tag  => NotificationResponse.decoder
       case NoticeResponse.Tag        => NoticeResponse.decoder
       case ParameterDescription.Tag  => ParameterDescription.decoder
       case ParameterStatus.Tag       => ParameterStatus.decoder
       case ParseComplete.Tag         => ParseComplete.decoder
       case PortalSuspended.Tag       => PortalSuspended.decoder
       case ReadyForQuery.Tag         => ReadyForQuery.decoder
       case RowData.Tag               => RowData.decoder
       case RowDescription.Tag        => RowDescription.decoder
       case _                         => UnknownMessage.decoder(tag)
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy