blob: 1c06975e0a1c996037df0308cad7c0a8b2208e5b [file] [log] [blame]
// 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.pkg;
using fuchsia.io;
using zx;
/// Resolves packages from a registry.
///
/// This interface is intended to be implemented by package resolver components, and used by
/// repository administration tools.
[Discoverable]
protocol PackageResolver {
/// Populates or updates the cache of a package with the given selectors as specified by the
/// update policy.
///
/// Ensures that a package is on the local filesystem.
///
/// Arguments:
/// * |package_uri| The package URI for a package (TODO: link to docs).
/// * |selectors| are the package selectors (TODO: link to docs).
/// * |dir| is a request for a directory that will be resolved when the package has been
/// successfully cached.
///
/// Return Values:
/// * |ZX_OK| if the package was successfully opened.
/// * |ZX_ERR_ACCESS_DENIED| if the resolver does not have permission to fetch a package blob.
/// * |ZX_ERR_IO| if there is some other unspecified error during I/O.
/// * |ZX_ERR_NOT_FOUND| if the package or a package blob does not exist.
/// * |ZX_ERR_NO_SPACE| if there is no space available to store the package.
/// * |ZX_ERR_UNAVAILABLE| if the resolver is currently unable to fetch a package blob.
Resolve(
string package_uri,
vector<string> selectors,
UpdatePolicy update_policy,
request<fuchsia.io.Directory> dir
) -> (zx.status status);
};
/// The |UpdatePolicy| provides different policies to be used when the |PackageResolver| is
/// fetching packages.
struct UpdatePolicy {
/// Should the resolver fetch the package if it is not present on the local system.
bool fetch_if_absent;
/// Should the resolver allow old versions of the package to be used.
bool allow_old_versions;
};