// Copyright 2020 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.
library test.benchmarkfidl;

// Example Response.
// Based on fuchsia.media.StreamPacket.
type ErrorSyntaxResponse = struct {
    ptrs int64;
    payload_buffer_id uint32;
    payload_offset uint64;
    payload_size uint64;
    flags uint32;
    buffer_config uint64;
    stream_segment_id uint64;
};

// Result for a protocol using the error syntax.
type ErrorSyntaxResult = strict union {
    1: response ErrorSyntaxResponse;
    2: err uint32;
};

type ErrorSyntaxResultStruct = struct {
    result ErrorSyntaxResult;
};
