// 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.examples.diagnostics;

closed protocol Profile {
    compose ProfileReader;
    strict SetName(struct {
        name string:NAME_LENGTH;
    });

    strict AddBalance(struct {
        amount int64;
    });

    strict WithdrawBalance(struct {
        amount int64;
    }) -> (struct {
        success bool;
    });
};

// Read only protocol for the profile.
closed protocol ProfileReader {
    strict GetName() -> (struct {
        name string:NAME_LENGTH;
    });

    strict GetBalance() -> (struct {
        amount int64;
    });
};
