// Copyright 2023 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.hardware.gpt.metadata;

using fuchsia.hardware.block.partition as partition;

const MAX_PARTITIONS uint32 = 16;

type PartitionOptions = table {
    /// The type GUID to report for this partition. If not set, the type GUID from the partition
    /// table is used.
    1: type_guid_override partition.Guid;
};

/// For each partition in the table read from the block device, the GPT driver will attempt to
/// find a `PartitionInfo` entry where `name` matches the partition name. If a match is found,
/// that entry's `options` are applied to the partition device. Otherwise, default values are used
/// as specified above. Entries that do not match any partition are ignored.
type PartitionInfo = struct {
    name string:partition.NAME_LENGTH;
    options PartitionOptions;
};

/// Passed to the GPT driver in metadata as DEVICE_METADATA_GPT_INFO.
type GptInfo = table {
    1: partition_info vector<PartitionInfo>:MAX_PARTITIONS;
};
