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

using fuchsia.ldsvc;
using zx;

const uint32 MAX_RESOLVE_NAME = 2048;

[Discoverable, Layout = "Simple"]
interface Resolver {
    // Resolves the given |name| to an |executable| and an shared library loader.
    //
    // If present, the |executable| is suitable for use as the |executable|
    // property of |LaunchInfo|. If present, the |ldsvc| is suitable for use as
    // the PA_LDSVC_LOADER handle when launching the process.
    //
    // For example, the resolver might locate the given |name| inside a package
    // and return the executable binary from the package as well as a shared
    // library loader scoped to that package.
    1: Resolve(string:MAX_RESOLVE_NAME name) -> (zx.status status,
                                                 handle<vmo>? executable,
                                                 fuchsia.ldsvc.Loader? ldsvc);
};
