// 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.
library zx;

alias vector_void = vector<byte>;

// Note that this has to be named "protocol Syscall" to make test_wrapper have
// the correct name.
@transport("Syscall")
protocol Syscall {
    // Typical case.
    @blocking
    BlockingWrite(resource struct {
        handle handle:VMO;
        buffer vector_void;
        offset uint64;
    }) -> (struct {
        status status;
    });

    // Special case for abigen's test wrapper.
    TestWrapper(struct {
        a int32;
        b int32;
        c int32;
    }) -> (struct {
        status status;
    });
};
