@Nullable
  @Override
  public GenericRow decode(byte[] payload, GenericRow destination) {
    try {
      destination = (GenericRow) _decodeMethod.invoke(null, payload, destination);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
    return destination;
  }
@Test(dataProvider = "defaultCases")
  public void whenDefaultCases(String fieldName, Object protoValue, Object pinotVal)
      throws Exception {
    Descriptors.FieldDescriptor fd = ComplexTypes.TestMessage.getDescriptor().findFieldByName(fieldName);
    ComplexTypes.TestMessage.Builder messageBuilder = ComplexTypes.TestMessage.newBuilder();

    Assert.assertEquals(protoValue, fd.getDefaultValue());
    messageBuilder.setField(fd, protoValue);

    GenericRow row = new GenericRow();
    ProtoBufCodeGenMessageDecoder messageDecoder = setupDecoder("complex_types.jar",
        "org.apache.pinot.plugin.inputformat.protobuf.ComplexTypes$TestMessage", getAllSourceFieldsForComplexType());
    messageDecoder.decode(messageBuilder.build().toByteArray(), row);

    Assert.assertEquals(row.getValue(fd.getName()), pinotVal);
  }