// 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;

using fuchsia.media;

struct QueryResponse {
    vector<Proposal> proposals;
};

// An interface enabling Agents and Modules to contribute Proposals reactively
// to the Suggestion engine based on a user query.
interface QueryHandler {
    // Produces a list of Proposals in response to a query. The query may be empty
    // in the case of an initial ask, and this method is called every time the
    // query changes.
    //
    // Proposals given in the callback have their lifecycle tied to this query.
    // After the query has completed, the proposals are dismissed. When the query
    // changes, any proposals missing from the subsequent callback are likewise
    // dismissed. These Proposals are distinct from Next/Interruption proposals,
    // even if they may share IDs.
    //
    // Alternately, the client is free to call Propose on its
    // ProposalPublisher to make persistent Proposals. However, these
    // proposals may be subject to more stringent filtering by the Suggestion
    // Engine. TODO(rosswang): spec/revisit.
    1: OnQuery(UserInput query) -> (QueryResponse response);
};
