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

type ByteVector = struct {
    bytes vector<uint8>;
};

protocol ByteVectorEventProtocol {
    -> Send(struct {
        val ByteVector;
    });
};

protocol ByteVectorEchoCall {
    Echo(struct {
        val ByteVector;
    }) -> (struct {
        val ByteVector;
    });
};

@transport("Driver")
protocol ByteVectorEchoCallDriver {
    Echo(struct {
        val ByteVector;
    }) -> (struct {
        val ByteVector;
    });
};
