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
}