|  | // Copyright 2020 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; | 
|  |  | 
|  | /// A collection of TUF repositories contained in an attached storage device. | 
|  | [Discoverable] | 
|  | protocol LocalMirror { | 
|  | /// Obtains and returns a named TUF metadata file from an attached storage | 
|  | /// device. | 
|  | /// | 
|  | /// + request `repo_url` the URL of the TUF repository for which to return | 
|  | ///     metadata. | 
|  | /// + request `path` the path of the metadata file, relative to the | 
|  | ///     repository_metadata directory for the specific TUF repository. | 
|  | /// + request `metadata` a server end for a TUF metadata file to be opened | 
|  | ///     with `OPEN_RIGHT_READABLE | OPEN_FLAG_DESCRIBE`. If the metadata | 
|  | ///     directory exists but the requested file does not, the client end | 
|  | ///     will receive an OnOpen with `Status::NOT_FOUND`. | 
|  | /// * error a `GetMetadataError` value | 
|  | GetMetadata( | 
|  | RepositoryUrl repo_url, | 
|  | string:fuchsia.io.MAX_PATH path, | 
|  | request<fuchsia.io.File> metadata | 
|  | ) -> () error GetMetadataError; | 
|  |  | 
|  | /// Obtains and returns a blob from an attached storage device. | 
|  | /// | 
|  | /// + request `blob_id` the id of the blob to return. | 
|  | /// + request `blob` a server end for a blob file to be opened | 
|  | ///     with `OPEN_RIGHT_READABLE | OPEN_FLAG_DESCRIBE`. If the blobs | 
|  | ///     directory exists but the requested file does not, the client end | 
|  | ///     will receive an OnOpen with `Status::NOT_FOUND`. | 
|  | /// * error a `GetBlobError` value | 
|  | GetBlob( | 
|  | BlobId blob_id, | 
|  | request<fuchsia.io.File> blob | 
|  | ) -> () error GetBlobError; | 
|  | }; | 
|  |  | 
|  | /// Error type for [`fuchsia.pkg/LocalMirror.GetMetadata`]. | 
|  | enum GetMetadataError { | 
|  | /// An error occurred when opening the requested metadata file. This may (though | 
|  | /// does not necessarily) indicate the metadata directory does not exist. | 
|  | ERROR_OPENING_METADATA = 1; | 
|  | }; | 
|  |  | 
|  | /// Error type for [`fuchsia.pkg/LocalMirror.GetBlob`]. | 
|  | enum GetBlobError { | 
|  | /// An error occurred when opening the requested blob. This may (though | 
|  | /// does not necessarily) indicate the blobs directory does not exist. | 
|  | ERROR_OPENING_BLOB = 1; | 
|  | }; |