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

/// A content-addressed merkle root that describes an artifact that is tracked by the
/// packaging system.
type BlobId = struct {
    merkle_root array<uint8, 32>;
};

/// A tuple of the content-addressed merkle root for an artifact, along with that
/// artifact's length in bytes.
type BlobInfo = struct {
    blob_id BlobId;
    length uint64;
};

/// A fuchsia-pkg:// URL indicating a package.
/// https://fuchsia.dev/fuchsia-src/concepts/packages/package_url#package_identity
type PackageUrl = struct {
    url string:2048;
};

/// A fuchsia-pkg:// URL indicating a repository.
/// https://fuchsia.dev/fuchsia-src/concepts/packages/package_url#repository_identity
type RepositoryUrl = struct {
    url string:2048;
};

/// A single entry in the package index.
type PackageIndexEntry = struct {
    package_url PackageUrl;
    meta_far_blob_id BlobId;
};
