def decode[M <: BackendMessage]()

in finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/transport/MessageDecoder.scala [61:100]


  def decode[M <: BackendMessage](reader: PgBuf.Reader)(implicit decoder: MessageDecoder[M]): M =
    decoder.decode(reader)

  def fromBuf(buf: Buf): BackendMessage = {
    val reader = PgBuf.reader(buf)
    val cmd = reader.byte()

    if (reader.remaining >= 4) {
      // skip the 4 byte packet length
      reader.skip(4)
    }

    val ret = cmd match {
      case '1' => ParseComplete
      case '2' => BindComplete
      case '3' => CloseComplete
      case 'c' => CopyDone
      case 'C' => decode[CommandComplete](reader)
      case 'd' => decode[CopyData](reader)
      case 'D' => decode[DataRow](reader)
      case 'E' => decode[ErrorResponse](reader)
      case 'G' => decode[CopyInResponse](reader)
      case 'H' => decode[CopyOutResponse](reader)
      case 'I' => EmptyQueryResponse
      case 'K' => decode[BackendKeyData](reader)
      case 'n' => NoData
      case 'N' => decode[NoticeResponse](reader)
      case 'R' => decode[AuthenticationMessage](reader)
      case 's' => PortalSuspended
      case 'S' => decode[ParameterStatus](reader)
      case 't' => decode[ParameterDescription](reader)
      case 'T' => decode[RowDescription](reader)
      case 'Z' => decode[ReadyForQuery](reader)
      case byte => throw new PgSqlClientError(s"unimplemented message '${byte.toChar}'")
    }
    if (reader.remaining != 0) {
      throw new PgSqlClientError("message decoding did not consume the entire packet")
    }
    ret
  }