| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package flatbuffers
- import "errors"
- var (
- // Codec implements gRPC-go Codec which is used to encode and decode messages.
- Codec = "flatbuffers"
- // ErrInsufficientData is returned when the data is too short to read the root UOffsetT.
- ErrInsufficientData = errors.New("insufficient data")
- // ErrInvalidRootOffset is returned when the root UOffsetT is out of bounds.
- ErrInvalidRootOffset = errors.New("invalid root offset")
- )
- // FlatbuffersCodec defines the interface gRPC uses to encode and decode messages. Note
- // that implementations of this interface must be thread safe; a Codec's
- // methods can be called from concurrent goroutines.
- type FlatbuffersCodec struct{}
- // Marshal returns the wire format of v.
- func (FlatbuffersCodec) Marshal(v interface{}) ([]byte, error) {
- return v.(*Builder).FinishedBytes(), nil
- }
- // Unmarshal parses the wire format into v.
- func (FlatbuffersCodec) Unmarshal(data []byte, v interface{}) error {
- // Need at least 4 bytes to read the root table offset (UOffsetT).
- // Vtable soffset_t and metadata are read later during field access.
- if len(data) < SizeUOffsetT {
- return ErrInsufficientData
- }
- off := GetUOffsetT(data)
- // The root UOffsetT must be within the data buffer
- // Compare in the unsigned domain to avoid signedness pitfalls
- if off > UOffsetT(len(data)-SizeUOffsetT) {
- return ErrInvalidRootOffset
- }
- v.(flatbuffersInit).Init(data, off)
- return nil
- }
- // String old gRPC Codec interface func
- func (FlatbuffersCodec) String() string {
- return Codec
- }
- // Name returns the name of the Codec implementation. The returned string
- // will be used as part of content type in transmission. The result must be
- // static; the result cannot change between calls.
- //
- // add Name() for ForceCodec interface
- func (FlatbuffersCodec) Name() string {
- return Codec
- }
- type flatbuffersInit interface {
- Init(data []byte, i UOffsetT)
- }
|