// Copyright 2022 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 fuchsia.runtime.test;

using zx;

type WrappedValue = table {
    1: value uint32;
};

@discoverable
@transport("Driver")
closed protocol Setter {
    strict Set(struct {
        wrapped_value WrappedValue;
    }) -> () error zx.Status;
};

@discoverable
@transport("Driver")
closed protocol Getter {
    strict Get() -> (struct {
        value uint32;
    }) error zx.Status;
};

service Service {
    setter client_end:Setter;
    getter client_end:Getter;
};

@discoverable
closed protocol Waiter {
    strict Ack();
};
