// 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.
@available(added=7)
library fuchsia.castconfig;

using fuchsia.mem;

/// Error codes for the Watch operation.
type ErrorCode = strict enum {
    /// Error when there is no cast config available.
    NO_CAST_CONFIG = 1;
    /// Generic error.
    INTERNAL = 2;
};

/// Interface that provides cast config data.
@discoverable
protocol Provider {
    /// Requests a buffer containing cast config data.
    /// This call implements the Hanging Get protocol as detailed in
    /// https://fuchsia.dev/fuchsia-src/concepts/api/fidl#hanging-get
    ///
    /// All error cases are terminal, clients should not retry on error.
    Watch() -> (resource struct {
        config fuchsia.mem.Buffer;
    }) error ErrorCode;

    /// Notifies the config provider of the config status.
    ///
    /// `processed`: `true` if successfully received and processed
    /// `retry`: If `processed` is `false` config provider determines if a retry
    ///  is appropriate.
    Notify(struct {
        processed bool;
    }) -> (struct {
        retry bool;
    });
};
