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