docs: public static String opcodeString(int opcode) {
      switch (opcode) {
        case ProtocolConstants.Opcode.ERROR:
          return "ERROR";
        case ProtocolConstants.Opcode.STARTUP:
          return "STARTUP";
        case ProtocolConstants.Opcode.READY:
          return "READY";
        case ProtocolConstants.Opcode.AUTHENTICATE:
          return "AUTHENTICATE";
        case ProtocolConstants.Opcode.OPTIONS:
          return "OPTIONS";
        case ProtocolConstants.Opcode.SUPPORTED:
          return "SUPPORTED";
        case ProtocolConstants.Opcode.QUERY:
          return "QUERY";
        case ProtocolConstants.Opcode.RESULT:
          return "RESULT";
        case ProtocolConstants.Opcode.PREPARE:
          return "PREPARE";
        case ProtocolConstants.Opcode.EXECUTE:
          return "EXECUTE";
        case ProtocolConstants.Opcode.REGISTER:
          return "REGISTER";
        case ProtocolConstants.Opcode.EVENT:
          return "EVENT";
        case ProtocolConstants.Opcode.BATCH:
          return "BATCH";
        case ProtocolConstants.Opcode.AUTH_CHALLENGE:
          return "AUTH_CHALLENGE";
        case ProtocolConstants.Opcode.AUTH_RESPONSE:
          return "AUTH_RESPONSE";
        case ProtocolConstants.Opcode.AUTH_SUCCESS:
          return "AUTH_SUCCESS";
        default:
          return "0x" + Integer.toHexString(opcode);
      }
    }