//===- OffloadYAML.h - Offload Binary YAMLIO implementation -----*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file declares classes for handling the YAML representation of
/// offloading binaries.
///
//===----------------------------------------------------------------------===//

#ifndef LLVM_OBJECTYAML_OFFLOADYAML_H
#define LLVM_OBJECTYAML_OFFLOADYAML_H

#include "llvm/ADT/MapVector.h"
#include "llvm/Object/OffloadBinary.h"
#include "llvm/ObjectYAML/YAML.h"
#include "llvm/Support/YAMLTraits.h"
#include <optional>

namespace llvm {
namespace OffloadYAML {

struct Binary {
  struct StringEntry {
    StringRef Key;
    StringRef Value;
  };

  struct Member {
    std::optional<object::ImageKind> ImageKind;
    std::optional<object::OffloadKind> OffloadKind;
    std::optional<uint32_t> Flags;
    std::optional<std::vector<StringEntry>> StringEntries;
    std::optional<yaml::BinaryRef> Content;
  };

  std::optional<uint32_t> Version;
  std::optional<uint64_t> Size;
  std::optional<uint64_t> EntryOffset;
  std::optional<uint64_t> EntrySize;
  std::vector<Member> Members;
};

} // end namespace OffloadYAML
} // end namespace llvm

LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::OffloadYAML::Binary::Member)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::OffloadYAML::Binary::StringEntry)

namespace llvm {
namespace yaml {

template <> struct ScalarEnumerationTraits<object::ImageKind> {
  static void enumeration(IO &IO, object::ImageKind &Value);
};

template <> struct ScalarEnumerationTraits<object::OffloadKind> {
  static void enumeration(IO &IO, object::OffloadKind &Value);
};

template <> struct MappingTraits<OffloadYAML::Binary> {
  static void mapping(IO &IO, OffloadYAML::Binary &O);
};

template <> struct MappingTraits<OffloadYAML::Binary::StringEntry> {
  static void mapping(IO &IO, OffloadYAML::Binary::StringEntry &M);
};

template <> struct MappingTraits<OffloadYAML::Binary::Member> {
  static void mapping(IO &IO, OffloadYAML::Binary::Member &M);
};

} // end namespace yaml
} // end namespace llvm

#endif // LLVM_OBJECTYAML_OFFLOADYAML_H
