| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // +build fuchsia |
| |
| package fidl |
| |
| const FidlWireFormatMagicNumberInitial = 1 |
| |
| type MarshalerContext struct { |
| // TODO(mkember): Remove these fields, making it an empty struct. These |
| // are only kept for a soft transition with fuchsia.git. |
| DecodeUnionsFromXUnionBytes bool |
| EncodeUnionsAsXUnionBytes bool |
| } |
| |
| // newCtx returns the default context. |
| // During migrations, this controls the default write path. |
| func newCtx() MarshalerContext { |
| return MarshalerContext{} |
| } |
| |
| // MessageHeader represents a transactional message header. |
| type MessageHeader struct { |
| _ struct{} `fidl:"s" fidl_size_v1:"16" fidl_alignment_v1:"8"` |
| Txid uint32 `fidl:"0" fidl_offset_v1:"0" fidl_bounds:""` |
| Flags [3]uint8 `fidl:"4" fidl_offset_v1:"4" fidl_bounds:""` |
| Magic uint8 `fidl:"7" fidl_offset_v1:"7" fidl_bounds:""` |
| Ordinal uint64 `fidl:"8" fidl_offset_v1:"8" fidl_bounds:""` |
| } |
| |
| func (msg *MessageHeader) IsSupportedVersion() bool { |
| return msg.Magic == FidlWireFormatMagicNumberInitial |
| } |
| |
| // NewCtx creates a new MarshalerContext for unmarshaling based on msg.Flags. |
| // During migrations, this controls dynamic behavior in the read path. |
| func (msg *MessageHeader) NewCtx() MarshalerContext { |
| return newCtx() |
| } |
| |
| var mMessageHeader = MustCreateMarshaler(MessageHeader{}) |
| |
| var MessageHeaderSize = 16 |
| |
| func (msg *MessageHeader) Marshaler() Marshaler { |
| return mMessageHeader |
| } |
| |
| // NewHeader create a new MessageHeader for marshaling with the correct flags |
| // set based on the MarshalerContext. It is the caller's responsibilty to set |
| // the transaction ID and method ordinal |
| func (ctx MarshalerContext) NewHeader() MessageHeader { |
| header := MessageHeader{ |
| Flags: [3]uint8{0, 0, 0}, |
| Magic: FidlWireFormatMagicNumberInitial, |
| } |
| return header |
| } |