// Copyright 2017 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 container for component-scoped services. This contains any and all
// services needed by any sort of Module/Agent.
[Discoverable]
protocol IntelligenceServices {
    // These are just here for illustrative purposes, and are not a complete
    // list.
    GetContextReader(request<ContextReader> context_reader);
    GetContextWriter(request<ContextWriter> context_writer);

    GetProposalPublisher(request<ProposalPublisher> proposal_publisher);

    RegisterQueryHandler(QueryHandler query_handler);
};
