// Copyright 2018 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.sys2;

using zx;

// An interface for resolving a URL to a component.
//
// This interface is implemented by components that provide support
// for loading components with a particular URL scheme.   For example,
// the Fuchsia package component resolver exposes a service with this
// interface to resolve component URLs using the "fuchsia-pkg://" scheme.
//
// To use a resolver to resolve URLs within your realm, register it
// in your realm's manifest.  (TODO: explain in more detail)
//
// Note: The component manager is the only intended direct client of this
// interface.
[Discoverable]
protocol ComponentResolver {
    // Resolves a component with the given URL.
    //
    // |component_url| is the unescaped URL of the component to resolve.
    //
    // If successful, returns |ZX_OK| and information about the component
    // that was resolved.
    //
    // On failure, returns null |info| and...
    // - |ZX_ERR_INVALID_ARGS|: The component's URL was malformed.
    // - |ZX_ERR_NOT_FOUND|: The component does not exist.
    // - |ZX_ERR_UNAVAILABLE|: The resolver was unable to retrieve or parse
    //   the component's resources.
    Resolve(string component_url)
        -> (zx.status status, Component component);
};
