// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// GENERATED FILE: Do not edit!
//
// To rebuild this file, invoke third_party/go/regen-fidl.

// +build fuchsia

package mem

import (
	_zx "syscall/zx"
	_bindings "syscall/zx/fidl"
)

// A Buffer for data whose size is not necessarily a multiple of the page
// size.
//
// VMO objects have a physical size that is always a multiple of the page
// size. As such, VMO alone cannot serve as a buffer for arbitrarly sized
// data. |fuchsia.mem.Buffer| is a standard struct that aggregate the VMO
// and its size.
type Buffer struct {
	_ struct{} `fidl2:"s,16,8"`
	// The vmo.
	Vmo _zx.VMO `fidl2:"0"`
	// The size of the data in the vmo in bytes. This size must be smaller
	// than the physical size of the vmo.
	Size uint64
}

var _mBuffer = _bindings.CreateLazyMarshaler(Buffer{})

func (msg *Buffer) Marshaler() _bindings.Marshaler {
	return _mBuffer
}

// Implements Payload.
func (_ *Buffer) InlineAlignment() int {
	return 8
}

// Implements Payload.
func (_ *Buffer) InlineSize() int {
	return 16
}
