// 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 test.protocol.connector;

type Error = strict enum : int32 {
    PERMANENT = 1;
    TRANSIENT = 2;
};

@discoverable
closed protocol ProtocolFactory {
    strict CreateProtocol(resource struct {
        protocol server_end:Protocol;
    }) -> () error Error;
};

closed protocol Protocol {
    strict DoAction() -> () error Error;
};

@discoverable
closed protocol SimpleProtocol {
    strict DoAction() -> () error Error;
};
