// Copyright 2016 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.modular;

// A service enabling Agents and Modules to contribute Proposals proactively to
// the Suggestion engine.
[Discoverable]
interface ProposalPublisher {
    // Includes the given |proposal| in the Next/Interruption channel from this
    // publisher. Proposals are identified by |proposal.id|, and are namespaced by
    // the component's ID and proposal channel (Query vs. Next/Interruption).
    //
    // If a Next/Interruption Proposal with the same id is already present, it is
    // overwritten.
    1: Propose(Proposal proposal);

    // Removes the Proposal with the given ID from the Next/Interruption channel
    // produced by this component.
    2: Remove(string proposal_id);

    // Includes the navigation request in the Navigation channel from this
    // publisher. Navigation events are immediate and not tracked by any id.
    // TODO(ejia): Replace with puppetmaster.
    // EXPERIMENTAL
    3: ProposeNavigation(NavigationAction navigation);
};
