1//===- ArchiveYAML.cpp - ELF YAMLIO implementation -------------------- ----===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines classes for handling the YAML representation of archives.
10//
11//===----------------------------------------------------------------------===//
12
13#include "llvm/ObjectYAML/ArchiveYAML.h"
14
15namespace llvm {
16
17namespace yaml {
18
19void MappingTraits<ArchYAML::Archive>::mapping(IO &IO, ArchYAML::Archive &A) {
20 assert(!IO.getContext() && "The IO context is initialized already");
21 IO.setContext(&A);
22 IO.mapTag(Tag: "!Arch", Default: true);
23 IO.mapOptional(Key: "Magic", Val&: A.Magic, Default: "!<arch>\n");
24 IO.mapOptional(Key: "Members", Val&: A.Members);
25 IO.mapOptional(Key: "Content", Val&: A.Content);
26 IO.setContext(nullptr);
27}
28
29std::string MappingTraits<ArchYAML::Archive>::validate(IO &,
30 ArchYAML::Archive &A) {
31 if (A.Members && A.Content)
32 return "\"Content\" and \"Members\" cannot be used together";
33 return "";
34}
35
36void MappingTraits<ArchYAML::Archive::Child>::mapping(
37 IO &IO, ArchYAML::Archive::Child &E) {
38 assert(IO.getContext() && "The IO context is not initialized");
39 for (auto &P : E.Fields)
40 IO.mapOptional(Key: P.first.data(), Val&: P.second.Value, Default: P.second.DefaultValue);
41 IO.mapOptional(Key: "Content", Val&: E.Content);
42 IO.mapOptional(Key: "PaddingByte", Val&: E.PaddingByte);
43}
44
45std::string
46MappingTraits<ArchYAML::Archive::Child>::validate(IO &,
47 ArchYAML::Archive::Child &C) {
48 for (auto &P : C.Fields)
49 if (P.second.Value.size() > P.second.MaxLength)
50 return ("the maximum length of \"" + P.first + "\" field is " +
51 Twine(P.second.MaxLength))
52 .str();
53 return "";
54}
55
56} // end namespace yaml
57
58} // end namespace llvm
59