blob: 9c3e657a01cc6f5a884c6f54c55a36fba2c77400 [file] [log] [blame]
// 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;
[Discoverable]
protocol ModuleResolver {
/// Finds Modules (contained in Fuchsia packages) that satisfy the constraints
/// specified in `query`. Module resolution is done by matching the requested
/// `query.action` and `query.parameter_constraints` (with both names and
/// types) against actions and constraints specified in module manifests.
///
/// If no results could be found, `response.results` will be empty.
///
/// For detailed information on the resolution process, see
/// docs/modular/module_resolution.md.
///
// TODO(thatguy): Offer some kind of fallback instruction/option to clients
// in the case of no results.
FindModules(FindModulesQuery query) -> (FindModulesResponse response);
};
/// Mirrors the information present in a Intent. Where a Intent is meant to
/// interface between Modules and the Framework, this structure is specific to
/// the interface between the Framework and the ModuleResolver.
///
/// In that role, it has references to structures and concepts that are only
/// visible within the abstraction layer of the Framework.
struct FindModulesQuery {
/// The handler is a module URL; if the handler is specified, the search for
/// (action, parameter_constraints) is scoped within the specified handler.
string? handler;
string action;
vector<FindModulesParameterConstraint> parameter_constraints;
};
struct FindModulesParameterConstraint {
string param_name;
vector<string> param_types;
};
enum FindModulesStatus {
/// A search was successfully conducted.
SUCCESS = 0;
/// `FindModulesQuery.handler` was specified but the resolver doesn't know
/// about it.
UNKNOWN_HANDLER = 1;
};
struct FindModulesResponse {
FindModulesStatus status;
vector<FindModulesResult> results;
};
struct FindModulesResult {
/// The ID of the Module. For now, this is the URL of the Module binary.
string module_id;
/// The Module's manifest file (see docs/manifests/module.md).
ModuleManifest? manifest;
};