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

struct QueryResponse {
    vector<Proposal> proposals;
};

// An interface enabling Agents and Modules to contribute Proposals reactively
// to the Suggestion engine based on a user query.
protocol 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.
    OnQuery(UserInput query) -> (QueryResponse response);
};
