tree 7bb626acdcb11645df5a33af67033fb59a821012
parent ca13247ca4018fc51662b0b7f3b8d9d4fdcf8e7a
author Enrico Olivelli <eolivelli@gmail.com> 1617844486 +0200
committer GitHub <noreply@github.com> 1617844486 +0800
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJgblkGCRBK7hj4Ov3rIwAAdHIIAFUB1bszo733P9TkizPTjc5L
 xjIksvFmff1NuuqkvBmzpHX9gtSrSmERRUf2taCjOrhTTsce9Aac5oKuWg777zW3
 h09Bju6J/U1Tkk1f6uUL8GrPAAIGenNQwziYzanMnzJawI8mTDWfwVV5Rr9RqPVw
 of/3flgDnl+Em5+zszLfgHtdiV3EJMK4rSfTiD3mxrjdqfuXf5QPE2q2cViFiWaJ
 Wnuld7B1MNBV6JgZ3kLiW1e5V43/f4ejxxqXSLSBnb0kfsHxqm80A5dITU6B7ZFV
 DfP5rWjB7U95A9owea3qwvMqnU6W2jTRZTlIDAXAoxFWHiMRlnWfzcCB2leleH4=
 =2iFY
 -----END PGP SIGNATURE-----
 

Implement GenericObject - Allow GenericRecord to wrap any Java Object (#10057)

Contents:
- introduce new high level interface GenericObject, that represents every logical value on the Pulsar topic
- allow AutoConsumeSchema to deal with every Schema type
- handle schema less topics with AutoConsumeSchema (return Bytes schema and byte[] payload)
- rename `getNativeRecord` to `getNativeObject`

How it works:
- in case of non struct schema, like for primitives and for KeyValue, wrap the result into a PrimitiveRecord class, that is an implementation of GenericRecord that wraps a Object and a SchemaType, it returns an empty list of "fields"

Intended audience:
- allow users to implement Sink<GenericObject>, that is to write Sinks that work with every Schema type (the patch for Pulsar IO will follow up as a separate PR)


```
interface GenericObject {
      Object getNativeObject();
      SchemaType getSchemaType();
}
interface GenericRecord extends GenericObject
```
