// 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;

// Based on fuchsia.media.StreamSource.StreamPacket, used in
// AudioCapturerOnPacketProducedEvent:
type StreamPacket = struct {
    @allow_deprecated_struct_defaults
    pts int64 = 0x7fffffffffffffff;
    payload_buffer_id uint32;
    payload_offset uint64;
    payload_size uint64;
    @allow_deprecated_struct_defaults
    flags uint32 = 0;
    @allow_deprecated_struct_defaults
    buffer_config uint64 = 0;
    @allow_deprecated_struct_defaults
    stream_segment_id uint64 = 0;
};

protocol StreamPacketEventProtocol {
    -> Send(struct {
        val StreamPacket;
    });
};

protocol StreamPacketEchoCall {
    Echo(struct {
        val StreamPacket;
    }) -> (struct {
        val StreamPacket;
    });
};

@transport("Driver")
protocol StreamPacketEchoCallDriver {
    Echo(struct {
        val StreamPacket;
    }) -> (struct {
        val StreamPacket;
    });
};
