blob: bce8bfab17ccc307e027c618d228c7a9ec21f6e8 [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(https://fxbug.dev/42122591): Use this instead of zx.Status for `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;
/// The `context` provided to resolver is invalid.
INVALID_CONTEXT = 11;
};
/// This resolves packages from a repository.
///
/// This is intended to be implemented by package resolver components, and used by
/// repository administration tools.
@discoverable
closed protocol PackageResolver {
/// Populates or updates the cache of a package using an absolute package
/// URL.
///
/// Ensures that a package, and any transitive subpackages, are on the local
/// filesystem.
///
/// + request `package_url` the absolute package URL for a package. The
/// following link describes the format:
/// https://fuchsia.dev/fuchsia-src/concepts/packages/package_url.
/// Resource paths are not allowed.
/// + request `dir` a request for a directory that will be resolved when the
/// package has been successfully cached.
/// + returns a `resolved_context`, which can be passed to
/// `ResolveWithContext`, with a relative URL, to resolve a subpackage of
/// this package.
/// * error indicates failure. See `ResolveError` for values and error
/// scenarios.
// TODO(https://fxbug.dev/42122377) change `package_url` from string to PackageUrl
strict Resolve(resource struct {
package_url string;
dir server_end:fuchsia.io.Directory;
}) -> (struct {
resolved_context ResolutionContext;
}) error ResolveError;
/// Populates or updates the cache of a package using either an absolute or
/// a relative package URL. If relative, the package will be resolved
/// relative to the supplied `context`.
///
/// Ensures that a package is on the local filesystem.
///
/// + request `package_url` the absolute or relative package URL for a
/// package. If absolute, the `context` is ignored, and the behavior is
/// identical to calling `Resolve()`. A relative `package_url` is a
/// subpackage name.
/// + request `context` a `ResolutionContext` associated with a previously
/// resolved package, for resolving subpackages relative to that package.
/// + request `dir` a request for a directory that will be resolved when the
/// package has been successfully cached.
/// + returns a `resolved_context`, which can be passed to a subsequent call
/// to `ResolveWithContext`, with a relative URL, to resolve a subpackage
/// of this package or subpackage.
/// * error indicates failure. See `ResolveError` for values and error
/// scenarios.
// TODO(https://fxbug.dev/42122377) change `package_url` from string to PackageUrl
strict ResolveWithContext(resource struct {
package_url string;
context ResolutionContext;
dir server_end:fuchsia.io.Directory;
}) -> (struct {
resolved_context ResolutionContext;
}) 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`.
strict GetHash(struct {
package_url PackageUrl;
}) -> (struct {
meta_far_blob_id BlobId;
}) error zx.Status;
};