Documentation
¶
Overview ¶
Package avro implements encoding and decoding of Avro as defined by the Avro specification.
See the Avro specification for an understanding of Avro: http://avro.apache.org/docs/current/
Example (Usage) ¶
package main import ( "fmt" "log" "github.com/hamba/avro" ) var Schema = `{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }` type SimpleRecord struct { A int64 `avro:"a"` B string `avro:"b"` } func main() { schema, err := avro.Parse(Schema) if err != nil { log.Fatal(err) } in := SimpleRecord{A: 27, B: "foo"} data, err := avro.Marshal(schema, in) if err != nil { log.Fatal(err) } fmt.Printf("%+v\n", data) // Outputs: [54 6 102 111 111] out := SimpleRecord{} err = avro.Unmarshal(schema, data, &out) if err != nil { log.Fatal(err) } fmt.Printf("%+v\n", out) // Outputs: {A:27 B:foo} }
Output:
Index ¶
- Variables
- func Marshal(schema Schema, v interface{}) ([]byte, error)
- func Unmarshal(schema Schema, data []byte, v interface{}) error
- type API
- type ArraySchema
- type Config
- type Decoder
- type Encoder
- type EnumSchema
- type Field
- type FixedSchema
- type MapSchema
- type NamedSchema
- type NullSchema
- type PrimitiveSchema
- type Reader
- func (r *Reader) Read(b []byte)
- func (r *Reader) ReadArrayCB(callback func(*Reader) bool)
- func (r *Reader) ReadBlockHeader() (int64, int64)
- func (r *Reader) ReadBool() bool
- func (r *Reader) ReadBytes() []byte
- func (r *Reader) ReadDouble() float64
- func (r *Reader) ReadFloat() float32
- func (r *Reader) ReadInt() int32
- func (r *Reader) ReadLong() int64
- func (r *Reader) ReadMapCB(callback func(*Reader, string) bool)
- func (r *Reader) ReadNext(schema Schema) interface{}
- func (r *Reader) ReadString() string
- func (r *Reader) ReadVal(schema Schema, obj interface{})
- func (r *Reader) ReportError(operation string, msg string)
- func (r *Reader) Reset(b []byte) *Reader
- func (r *Reader) SkipBool()
- func (r *Reader) SkipBytes()
- func (r *Reader) SkipDouble()
- func (r *Reader) SkipFloat()
- func (r *Reader) SkipInt()
- func (r *Reader) SkipLong()
- func (r *Reader) SkipNBytes(n int)
- func (r *Reader) SkipString()
- type ReaderFunc
- type RecordSchema
- type RefSchema
- type Schema
- type Schemas
- type Type
- type UnionSchema
- type UnionType
- type ValDecoder
- type ValEncoder
- type Writer
- func (w *Writer) Buffer() []byte
- func (w *Writer) Buffered() int
- func (w *Writer) Flush() error
- func (w *Writer) Reset(out io.Writer)
- func (w *Writer) Write(b []byte)
- func (w *Writer) WriteBlockCB(callback func(w *Writer) int64) int64
- func (w *Writer) WriteBlockHeader(l int64, s int64)
- func (w *Writer) WriteBool(b bool)
- func (w *Writer) WriteBytes(b []byte)
- func (w *Writer) WriteDouble(f float64)
- func (w *Writer) WriteFloat(f float32)
- func (w *Writer) WriteInt(i int32)
- func (w *Writer) WriteLong(i int64)
- func (w *Writer) WriteString(s string)
- func (w *Writer) WriteVal(schema Schema, val interface{})
- type WriterFunc
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var DefaultConfig = Config{}.Freeze()
DefaultConfig is the default API.
Functions ¶
func Marshal ¶
Marshal returns the Avro encoding of v.
Example ¶
package main import ( "fmt" "os" "github.com/hamba/avro" ) func main() { schema := avro.MustParse(`{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }`) type SimpleRecord struct { A int64 `avro:"a"` B string `avro:"b"` } simple := SimpleRecord{} b, err := avro.Marshal(schema, simple) if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) }
Output:
func Unmarshal ¶
Unmarshal parses the Avro encoded data and stores the result in the value pointed to by v. If v is nil or not a pointer, Unmarshal returns an error.
Example ¶
package main import ( "fmt" "github.com/hamba/avro" ) func main() { schema := avro.MustParse(`{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }`) type SimpleRecord struct { A int64 `avro:"a"` B string `avro:"b"` } data := []byte{} // Your Avro data here simple := SimpleRecord{} if err := avro.Unmarshal(schema, data, &simple); err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", simple) }
Output:
Types ¶
type API ¶
type API interface { // Marshal returns the Avro encoding of v. Marshal(schema Schema, v interface{}) ([]byte, error) // Unmarshal parses the Avro encoded data and stores the result in the value pointed to by v. // If v is nil or not a pointer, Unmarshal returns an error. Unmarshal(schema Schema, data []byte, v interface{}) error // NewEncoder returns a new encoder that writes to w using schema. NewEncoder(schema Schema, w io.Writer) *Encoder // NewDecoder returns a new decoder that reads from reader r using schema. NewDecoder(schema Schema, r io.Reader) *Decoder // DecoderOf returns the value decoder for a given schema and type. DecoderOf(schema Schema, typ reflect2.Type) ValDecoder // EncoderOf returns the value encoder for a given schema and type. EncoderOf(schema Schema, tpy reflect2.Type) ValEncoder }
API represents a frozen Config.
type ArraySchema ¶
type ArraySchema struct {
// contains filtered or unexported fields
}
ArraySchema is an Avro array type schema.
func (*ArraySchema) Fingerprint ¶
func (s *ArraySchema) Fingerprint() [32]byte
Fingerprint returns the SHA256 fingerprint of the schema.
func (*ArraySchema) Items ¶
func (s *ArraySchema) Items() Schema
Items returns the items schema of an array.
func (*ArraySchema) String ¶
func (s *ArraySchema) String() string
String returns the canonical form of the schema.
type Config ¶
type Config struct { // TagKey is the struct tag key used when en/decoding structs. // This defaults to "avro". TagKey string // BlockLength is the length of blocks for maps and arrays. // This defaults to 100. BlockLength int }
Config customises how the codec should behave.
type Decoder ¶
type Decoder struct {
// contains filtered or unexported fields
}
Decoder reads and decodes Avro values from an input stream.
func NewDecoder ¶
NewDecoder returns a new decoder that reads from reader r using schema s.
Example ¶
package main import ( "bytes" "fmt" "github.com/hamba/avro" ) func main() { schema := `{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }` type SimpleRecord struct { A int64 `avro:"a"` B string `avro:"b"` } r := bytes.NewReader([]byte{}) // Your reader goes here decoder, err := avro.NewDecoder(schema, r) if err != nil { fmt.Println("error:", err) } simple := SimpleRecord{} if err := decoder.Decode(&simple); err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", simple) }
Output:
func NewDecoderForSchema ¶
NewDecoderForSchema returns a new decoder that reads from r using schema.
Example ¶
package main import ( "bytes" "fmt" "github.com/hamba/avro" ) func main() { schema := avro.MustParse(`{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }`) type SimpleRecord struct { A int64 `avro:"a"` B string `avro:"b"` } r := bytes.NewReader([]byte{}) // Your reader goes here decoder := avro.NewDecoderForSchema(schema, r) simple := SimpleRecord{} if err := decoder.Decode(&simple); err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", simple) }
Output:
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
Encoder writes Avro values to an output stream.
func NewEncoder ¶
NewEncoder returns a new encoder that writes to w using schema s.
Example ¶
package main import ( "bytes" "fmt" "os" "github.com/hamba/avro" ) func main() { schema := `{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }` type SimpleRecord struct { A int64 `avro:"a"` B string `avro:"b"` } w := &bytes.Buffer{} encoder, err := avro.NewEncoder(schema, w) if err != nil { fmt.Println("error:", err) } simple := SimpleRecord{} if err := encoder.Encode(simple); err != nil { fmt.Println("error:", err) } os.Stdout.Write(w.Bytes()) }
Output:
func NewEncoderForSchema ¶
NewEncoderForSchema returns a new encoder that writes to w using schema.
Example ¶
package main import ( "bytes" "fmt" "os" "github.com/hamba/avro" ) func main() { schema := avro.MustParse(`{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }`) type SimpleRecord struct { A int64 `avro:"a"` B string `avro:"b"` } w := &bytes.Buffer{} encoder := avro.NewEncoderForSchema(schema, w) simple := SimpleRecord{} if err := encoder.Encode(simple); err != nil { fmt.Println("error:", err) } os.Stdout.Write(w.Bytes()) }
Output:
type EnumSchema ¶
type EnumSchema struct {
// contains filtered or unexported fields
}
EnumSchema is an Avro enum type schema.
func (*EnumSchema) Fingerprint ¶
func (s *EnumSchema) Fingerprint() [32]byte
Fingerprint returns the SHA256 fingerprint of the schema.
func (*EnumSchema) Name ¶
func (s *EnumSchema) Name() string
Name implements the NamedSchema interface.
func (*EnumSchema) String ¶
func (s *EnumSchema) String() string
String returns the canonical form of the schema.
func (*EnumSchema) Symbols ¶
func (s *EnumSchema) Symbols() []string
Symbols returns the symbols of an enum.
type Field ¶
type Field struct {
// contains filtered or unexported fields
}
Field is an Avro record type field.
func (*Field) Default ¶
func (s *Field) Default() interface{}
Default returns the default of a field or nil.
The only time a nil default is valid is for a Null Type.
type FixedSchema ¶
type FixedSchema struct {
// contains filtered or unexported fields
}
FixedSchema is an Avro fixed type schema.
func (*FixedSchema) Fingerprint ¶
func (s *FixedSchema) Fingerprint() [32]byte
Fingerprint returns the SHA256 fingerprint of the schema.
func (*FixedSchema) Name ¶
func (s *FixedSchema) Name() string
Name implements the NamedSchema interface.
func (*FixedSchema) Size ¶
func (s *FixedSchema) Size() int
Size returns the number of bytes of the fixed schema.
func (*FixedSchema) String ¶
func (s *FixedSchema) String() string
String returns the canonical form of the schema.
type MapSchema ¶
type MapSchema struct {
// contains filtered or unexported fields
}
MapSchema is an Avro map type schema.
func (*MapSchema) Fingerprint ¶
Fingerprint returns the SHA256 fingerprint of the schema.
type NamedSchema ¶
NamedSchema represents a schema with a name.
type NullSchema ¶
type NullSchema struct{}
NullSchema is an Avro null type schema.
func (*NullSchema) Fingerprint ¶
func (s *NullSchema) Fingerprint() [32]byte
Fingerprint returns the SHA256 fingerprint of the schema.
func (*NullSchema) String ¶
func (s *NullSchema) String() string
String returns the canonical form of the schema.
type PrimitiveSchema ¶
type PrimitiveSchema struct {
// contains filtered or unexported fields
}
PrimitiveSchema is an Avro primitive type schema.
func NewPrimitiveSchema ¶
func NewPrimitiveSchema(t Type) *PrimitiveSchema
NewPrimitiveSchema creates a new PrimitiveSchema.
func (*PrimitiveSchema) Fingerprint ¶
func (s *PrimitiveSchema) Fingerprint() [32]byte
Fingerprint returns the SHA256 fingerprint of the schema.
func (*PrimitiveSchema) String ¶
func (s *PrimitiveSchema) String() string
String returns the canonical form of the schema.
func (*PrimitiveSchema) Type ¶
func (s *PrimitiveSchema) Type() Type
Type returns the type of the schema.
type Reader ¶
type Reader struct { Error error // contains filtered or unexported fields }
Reader is an Avro specific io.Reader.
func NewReader ¶
func NewReader(r io.Reader, bufSize int, opts ...ReaderFunc) *Reader
NewReader creates a new Reader.
func (*Reader) ReadArrayCB ¶
ReadArrayCB reads an array with a callback per item.
func (*Reader) ReadBlockHeader ¶
ReadBlockHeader reads a Block Header from the Reader.
func (*Reader) ReadDouble ¶
ReadDouble reads a Double from the Reader.
func (*Reader) ReadString ¶
ReadString reads a String from the Reader.
func (*Reader) ReadVal ¶
ReadVal parses Avro value and stores the result in the value pointed to by obj.
func (*Reader) ReportError ¶
ReportError record a error in iterator instance with current position.
func (*Reader) SkipNBytes ¶
SkipNBytes skips the given number of bytes in the reader.
type ReaderFunc ¶
type ReaderFunc func(r *Reader)
ReaderFunc is a function used to customize the Reader.
func WithReaderConfig ¶
func WithReaderConfig(cfg API) ReaderFunc
WithReaderConfig specifies the configuration to use with a reader.
type RecordSchema ¶
type RecordSchema struct {
// contains filtered or unexported fields
}
RecordSchema is an Avro record type schema.
func (*RecordSchema) Fields ¶
func (s *RecordSchema) Fields() []*Field
Fields returns the fields of a record.
func (*RecordSchema) Fingerprint ¶
func (s *RecordSchema) Fingerprint() [32]byte
Fingerprint returns the SHA256 fingerprint of the schema.
func (*RecordSchema) Name ¶
func (s *RecordSchema) Name() string
Name implements the NamedSchema interface.
func (*RecordSchema) String ¶
func (s *RecordSchema) String() string
String returns the canonical form of the schema.
type RefSchema ¶
type RefSchema struct {
// contains filtered or unexported fields
}
RefSchema is a reference to a named Avro schema.
func (*RefSchema) Fingerprint ¶
Fingerprint returns the SHA256 fingerprint of the schema.
type Schema ¶
type Schema interface { // Type returns the type of the schema. Type() Type // String returns the canonical form of the schema. String() string // Fingerprint returns the SHA256 fingerprint of the schema. Fingerprint() [32]byte }
Schema represents an Avro schema
func Parse ¶
Parse parses a schema string.
Example ¶
package main import ( "fmt" "log" "github.com/hamba/avro" ) func main() { schema, err := avro.Parse(`{ "type": "record", "name": "simple", "namespace": "org.hamba.avro", "fields" : [ {"name": "a", "type": "long"}, {"name": "b", "type": "string"} ] }`) if err != nil { log.Fatal(err) } fmt.Println(schema.Type()) // Outputs: record }
Output:
func ParseFiles ¶
ParseFiles parses the schemas in the files, in the order they appear, returning the last schema.
This is useful when your schemas rely on other schemas.
type Type ¶
type Type string
Type is a schema type
const ( Record Type = "record" Ref Type = "<ref>" Enum Type = "enum" Array Type = "array" Map Type = "map" Union Type = "union" Fixed Type = "fixed" String Type = "string" Bytes Type = "bytes" Int Type = "int" Long Type = "long" Float Type = "float" Double Type = "double" Boolean Type = "boolean" Null Type = "null" )
Schema type constants.
type UnionSchema ¶
type UnionSchema struct {
// contains filtered or unexported fields
}
UnionSchema is an Avro union type schema.
func (*UnionSchema) Fingerprint ¶
func (s *UnionSchema) Fingerprint() [32]byte
Fingerprint returns the SHA256 fingerprint of the schema.
func (*UnionSchema) Nullable ¶
func (s *UnionSchema) Nullable() bool
Nullable returns the Schema if the union is nullable, otherwise nil.
func (*UnionSchema) String ¶
func (s *UnionSchema) String() string
String returns the canonical form of the schema.
func (*UnionSchema) Types ¶
func (s *UnionSchema) Types() Schemas
Types returns the types of a union.
type UnionType ¶
UnionType is the interface implemented by types that can resolve schema types/names to and from objects.
Example ¶
package main import ( "fmt" "os" "github.com/hamba/avro" ) type SimpleUnionType struct { Val interface{} } func (u *SimpleUnionType) Value() *interface{} { return &u.Val } func (u *SimpleUnionType) SetType(typ string) error { switch typ { case string(avro.String): u.Val = "" case string(avro.Int): u.Val = int(0) default: return fmt.Errorf("unknown type %s", typ) } return nil } func (u *SimpleUnionType) GetType() (string, error) { switch u.Val.(type) { case string: return string(avro.String), nil case int: return string(avro.Int), nil } return "", fmt.Errorf("unknown type %T", u.Val) } type UnionRecord struct { Items map[string]*SimpleUnionType `avro:"items"` } func main() { schema := avro.MustParse(`{ "type": "record", "name": "union", "namespace": "org.hamba.avro", "fields" : [ {"name": "items", "type": {"type": "map", "values": ["string", "int"]}} ] }`) record := UnionRecord{} b, err := avro.Marshal(schema, record) if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) }
Output:
type ValDecoder ¶
ValDecoder represents an internal value decoder.
You should never use ValDecoder directly.
type ValEncoder ¶
ValEncoder represents an internal value encoder.
You should never use ValEncoder directly.
type Writer ¶
type Writer struct { Error error // contains filtered or unexported fields }
Writer is an Avro specific io.Writer.
func NewWriter ¶
func NewWriter(out io.Writer, bufSize int, opts ...WriterFunc) *Writer
NewWriter creates a new Writer.
func (*Writer) WriteBlockCB ¶
WriteBlockCB writes a block using the callback.
func (*Writer) WriteBlockHeader ¶
WriteBlockHeader writes a Block Header to the Writer.
func (*Writer) WriteBytes ¶
WriteBytes writes Bytes to the Writer.
func (*Writer) WriteDouble ¶
WriteDouble writes a Double to the Writer.
func (*Writer) WriteFloat ¶
WriteFloat writes a Float to the Writer.
func (*Writer) WriteString ¶
WriteString reads a String to the Writer.
type WriterFunc ¶
type WriterFunc func(w *Writer)
WriterFunc is a function used to customize the Writer.
func WithWriterConfig ¶
func WithWriterConfig(cfg API) WriterFunc
WithWriterConfig specifies the configuration to use with a writer.
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
internal
|
|
Package container implements encoding and decoding of Avro Object Container Files as defined by the Avro specification.
|
Package container implements encoding and decoding of Avro Object Container Files as defined by the Avro specification. |
Package registry implements a Confluent Schema Registry compliant client.
|
Package registry implements a Confluent Schema Registry compliant client. |