An implementation of AvroInputStream that reads values of type T written as binary data.
An AvroOutputStream that writes the schema along with the messages.
An AvroOutputStream that writes the schema along with the messages. This is usually the format required when writing multiple messages to a single file. Some frameworks, such as a Kafka, store the Schema separately to messages, in which case the AvroBinaryInputStream is what you would need.
the underlying stream that data will be written to.
This annotation is used to disable generics in the encoding of a record's name.
This annotation is used to disable generics in the encoding of a record's name.
Normally, the record name for a generic type is the name of the
raw type, plus the actual type parameters. For example, a class Foo
with type parameters Int and Boolean, would have a generated name of
FooInt_Boolean
When this annotation is present on a type, the name used in the
schema will simply be the raw type, eg Foo
.
AvroFixed overrides the schema type for a field or a value class so that the schema is set to org.apache.avro.Schema.Type.FIXED rather than whatever the default would be.
AvroFixed overrides the schema type for a field or a value class so that the schema is set to org.apache.avro.Schema.Type.FIXED rather than whatever the default would be.
This annotation can be used in the following ways:
- On a field, eg case class Foo(@AvroField(10) name: String)
which results in the field name
having schema type FIXED with
a size of 10.
- On a value type, eg @AvroField(7) case class Foo(name: String) extends AnyVal
which results in all usages of the value type having schema
FIXED with a size of 7 rather than the default.
AvroName allows the name used by Avro to be different from what is defined in code.
AvroName allows the name used by Avro to be different from what is defined in code.
For example, if a case class defines a field z, such as
case class Foo(z: String)
then normally this will be
serialized as an entry 'z' in the Avro Record.
However, if the field is annotated such as
case class Foo(@AvroName("x") z: String)
then the entry
in the Avro Record will be for 'x'.
Similarly for deserialization, if a field is annotated then the name that is looked up in the avro record will be the annotated name and not the field name in Scala.
The second example is with classes. If a class is annotated with @AvroName then the name used in the record schema will not be the classname but the annotated value.
This will also have an effect on serialization. For example, when decoding records into an Either, the decoder must decide if the value is a Left or a Right. It usually does this by comparing the name in the record to the classnames of the either types, but when annotated, it will compare the name in the record to the annotated value.
An AvroOutputStream will write instances of T to an underlying representation.
An AvroOutputStream will write instances of T to an underlying representation.
There are three implementations of this stream
See the methods on the companion object to create instances of each of these types of stream.
A Decoder is used to convert an Avro value, such as a GenericRecord, SpecificRecord, GenericFixed, EnumSymbol, or a basic JVM type, into a target Scala type.
A Decoder is used to convert an Avro value, such as a GenericRecord, SpecificRecord, GenericFixed, EnumSymbol, or a basic JVM type, into a target Scala type.
For example, a Decoder[String] would convert an input of type Utf8 - which is one of the ways Avro can encode strings - into a plain Java String.
Another example, a decoder for Option[String] would handle inputs of null by emitting a None, and a non-null input by wrapping the decoded value in a Some.
A final example is converting a GenericData.Array or a Java collection type into a Scala collection type.
An Encoder encodes a Scala value of type T into a compatible Avro value based on the given schema.
An Encoder encodes a Scala value of type T into a compatible Avro value based on the given schema.
For example, given a string, and a schema of type Schema.Type.STRING then the string would be encoded as an instance of Utf8, whereas the same string and a Schema.Type.FIXED would be encoded as an instance of GenericData.Fixed.
Another example is given a Scala enumeration value, and a schema of type Schema.Type.ENUM, the value would be encoded as an instance of GenericData.EnumSymbol.
Converts from an Avro GenericRecord into instances of T.
Extracts name and namespace from a TypeName.
Extracts name and namespace from a TypeName. Takes into consideration provided annotations.
An implementation of org.apache.avro.generic.GenericContainer that is both a GenericRecord and a SpecificRecord.
Brings together ToRecord and FromRecord in a single interface.
A SchemaFor generates an Avro Schema for a Scala or Java type.
A SchemaFor generates an Avro Schema for a Scala or Java type.
For example, a String SchemaFor could return an instance of Schema.Type.STRING or Schema.Type.FIXED depending on the type required for Strings.
Converts from instances of T into Record's.
Converts from instances of T into Record's.
Note: This interface requires that T is marshalled to an Avro GenericRecord / SpecificRecord, and therefore is limited to use by case classes or traits. This interface is essentially just a convenience wrapper around an Encoder so you do not have to cast the result.
If you wish to convert an avro type other than record use an Encoder directly.
When we set a default on an avro field, the type must match the schema definition.
When we set a default on an avro field, the type must match the schema definition. For example, if our field has a schema of type UUID, then the default must be a String, or for a schema of Long, then the type must be a java Long and not a Scala long.
This class will accept a scala value and convert it into a type suitable for Avro and the provided schema.
Returns a RecordFormat that will convert to/from instances of T and avro Record's.
An implementation of AvroInputStream that reads values of type T written as binary data. See https://avro.apache.org/docs/current/spec.html#binary_encoding
In order to convert the underlying binary data into types of T, this input stream requires an instance of Decoder.