// 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.
struct BlobId {
    array<uint8>:32 merkle_root;
};

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

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

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

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