| // 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; |
| }; |