//===- ArchiveYAML.cpp - ELF YAMLIO implementation -------------------- ----===// // // 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 // //===----------------------------------------------------------------------===// // // This file defines classes for handling the YAML representation of archives. // //===----------------------------------------------------------------------===// #include "llvm/ObjectYAML/ArchiveYAML.h" namespace llvm { namespace yaml { void MappingTraits::mapping(IO &IO, ArchYAML::Archive &A) { assert(!IO.getContext() && "The IO context is initialized already"); IO.setContext(&A); IO.mapTag("!Arch", true); IO.mapOptional("Magic", A.Magic, "!\n"); IO.mapOptional("Members", A.Members); IO.mapOptional("Content", A.Content); IO.setContext(nullptr); } std::string MappingTraits::validate(IO &, ArchYAML::Archive &A) { if (A.Members && A.Content) return "\"Content\" and \"Members\" cannot be used together"; return ""; } void MappingTraits::mapping( IO &IO, ArchYAML::Archive::Child &E) { assert(IO.getContext() && "The IO context is not initialized"); for (auto &P : E.Fields) IO.mapOptional(P.first.data(), P.second.Value, P.second.DefaultValue); IO.mapOptional("Content", E.Content); IO.mapOptional("PaddingByte", E.PaddingByte); } std::string MappingTraits::validate(IO &, ArchYAML::Archive::Child &C) { for (auto &P : C.Fields) if (P.second.Value.size() > P.second.MaxLength) return ("the maximum length of \"" + P.first + "\" field is " + Twine(P.second.MaxLength)) .str(); return ""; } } // end namespace yaml } // end namespace llvm