blob: 47dbee7fde92f2c91d449115cbc296a521226f24 [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;
/// Error codes for PackageResolver operations.
// TODO(fxb/46003): Use this instead of zx.status for `Resolve` and `GetHash`
enum ResolveError : int32 {
/// The resolver encountered an otherwise unspecified error while handling the request.
INTERNAL = 1;
/// The resolver does not have permission to fetch a package blob.
ACCESS_DENIED = 2;
/// Some unspecified error during I/O.
IO = 3;
/// The package blob does not exist.
BLOB_NOT_FOUND = 4;
/// The package does not exist.
PACKAGE_NOT_FOUND = 5;
/// The resolver does not know about the repo.
REPO_NOT_FOUND = 6;
/// There is no space available to store the package or metadata.
NO_SPACE = 7;
/// The resolver is currently unable to fetch a package blob.
UNAVAILABLE_BLOB = 8;
/// The resolver is currently unable to fetch a repository's metadata.
UNAVAILABLE_REPO_METADATA = 9;
/// The `package_url` provided to resolver is invalid.
INVALID_URL = 10;
};
/// This resolves packages from a repository.
///
/// This 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.
///
/// Ensures that a package is on the local filesystem.
///
/// + request `package_url` the package URL for a package. The following link describes
/// the format, resource paths are not allowed:
/// https://fuchsia.dev/fuchsia-src/concepts/packages/package_url.
/// + request `selectors` the package selectors. This feature is unimplemented and the
/// parameter will be ignored.
/// + request `dir` a request for a directory that will be resolved when the package has
/// been successfully cached.
/// * error indicates failure. See `ResolveError` for values and error scenarios.
// TODO(fxbug.dev/45811) change `package_url` from string to PackageUrl
Resolve(
string package_url,
vector<string> selectors,
request<fuchsia.io.Directory> dir
) -> () error ResolveError;
/// Determines the hash of a package.
///
/// + request `package_url` the package URL for a package.
/// - response `meta_far_blob_id` the hash of the package.
/// * error a zx_status value indicating failure. One of the following:
/// * `ZX_ERR_INTERNAL` if the resolver encountered an otherwise unspecified error
/// while handling the request.
/// * `ZX_ERR_NOT_FOUND` if the package does not exist in the repository specified by
/// `package_url`.
/// * `ZX_ERR_BAD_STATE` if the resolver does not know about the repository specified by
/// `package_url`.
GetHash(
PackageUrl package_url
) -> (BlobId meta_far_blob_id) error zx.status;
};