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

// This interface is given to all components in their |ComponentContext|. Any
// component can resolve an entity reference into an |Entity|.
interface EntityResolver {
    // Finds and binds |entity_request| to an Entity handle for the Entity
    // referenced by |entity_reference|. If an error occurs, |entity_request|
    // will be closed.
    //
    // This method is called by any component who wants to use an Entity using an
    // entity reference. A component has to get an entity reference (directly or
    // indirectly) from an agent, for example through some fidl interface. The
    // agent will create an entity reference using EntityReferenceFactory. During
    // entity resolution, that agent then provides data for the Entity
    // through an EntityProvider service it exposes. Thus, any Agent that wishes
    // to use EntityReferenceFactory to dispense entity references through its
    // agent services MUST also implement the EntityProvider service.
    1: ResolveEntity(string entity_reference, request<Entity> entity_request);
};
