blob: 543aa13210096cde6c82f75b46ce97ace7e09670 [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`
type ResolveError = strict enum : 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.
///
/// 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 `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(resource struct {
package_url string;
dir server_end:fuchsia.io.Directory;
}) -> (struct {}) 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(struct {
package_url PackageUrl;
}) -> (struct {
meta_far_blob_id BlobId;
}) error zx.status;
};