Imported Upstream version 3.25.0
[platform/upstream/cmake.git] / Source / cmCMakePresetsGraphReadJSONPackagePresets.cxx
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #include <cstddef>
4 #include <functional>
5 #include <map>
6 #include <memory>
7 #include <string>
8 #include <vector>
9
10 #include <cm/optional>
11 #include <cmext/string_view>
12
13 #include <cm3p/json/value.h>
14
15 #include "cmCMakePresetsGraph.h"
16 #include "cmCMakePresetsGraphInternal.h"
17 #include "cmJSONHelpers.h"
18
19 namespace {
20 using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
21 using PackagePreset = cmCMakePresetsGraph::PackagePreset;
22
23 auto const OutputHelper =
24   cmJSONHelperBuilder<ReadFileResult>::Object<PackagePreset>(
25     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
26     .Bind("debug"_s, &PackagePreset::DebugOutput,
27           cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
28     .Bind("verbose"_s, &PackagePreset::VerboseOutput,
29           cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false);
30
31 auto const VariableHelper = cmJSONHelperBuilder<ReadFileResult>::String(
32   ReadFileResult::READ_OK, ReadFileResult::INVALID_VARIABLE);
33
34 auto const VariablesHelper =
35   cmJSONHelperBuilder<ReadFileResult>::Map<std::string>(
36     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, VariableHelper);
37
38 auto const PackagePresetHelper =
39   cmJSONHelperBuilder<ReadFileResult>::Object<PackagePreset>(
40     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
41     .Bind("name"_s, &PackagePreset::Name,
42           cmCMakePresetsGraphInternal::PresetStringHelper)
43     .Bind("inherits"_s, &PackagePreset::Inherits,
44           cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
45           false)
46     .Bind("hidden"_s, &PackagePreset::Hidden,
47           cmCMakePresetsGraphInternal::PresetBoolHelper, false)
48     .Bind<std::nullptr_t>("vendor"_s, nullptr,
49                           cmCMakePresetsGraphInternal::VendorHelper(
50                             ReadFileResult::INVALID_PRESET),
51                           false)
52     .Bind("displayName"_s, &PackagePreset::DisplayName,
53           cmCMakePresetsGraphInternal::PresetStringHelper, false)
54     .Bind("description"_s, &PackagePreset::Description,
55           cmCMakePresetsGraphInternal::PresetStringHelper, false)
56     .Bind("environment"_s, &PackagePreset::Environment,
57           cmCMakePresetsGraphInternal::EnvironmentMapHelper, false)
58     .Bind("configurePreset"_s, &PackagePreset::ConfigurePreset,
59           cmCMakePresetsGraphInternal::PresetStringHelper, false)
60     .Bind("inheritConfigureEnvironment"_s,
61           &PackagePreset::InheritConfigureEnvironment,
62           cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
63     .Bind("generators"_s, &PackagePreset::Generators,
64           cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
65     .Bind("configurations"_s, &PackagePreset::Configurations,
66           cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
67     .Bind("variables"_s, &PackagePreset::Variables, VariablesHelper, false)
68     .Bind("configFile"_s, &PackagePreset::ConfigFile,
69           cmCMakePresetsGraphInternal::PresetStringHelper, false)
70     .Bind("output"_s, OutputHelper, false)
71     .Bind("packageName"_s, &PackagePreset::PackageName,
72           cmCMakePresetsGraphInternal::PresetStringHelper, false)
73     .Bind("packageVersion"_s, &PackagePreset::PackageVersion,
74           cmCMakePresetsGraphInternal::PresetStringHelper, false)
75     .Bind("packageDirectory"_s, &PackagePreset::PackageDirectory,
76           cmCMakePresetsGraphInternal::PresetStringHelper, false)
77     .Bind("vendorName"_s, &PackagePreset::VendorName,
78           cmCMakePresetsGraphInternal::PresetStringHelper, false)
79     .Bind("condition"_s, &PackagePreset::ConditionEvaluator,
80           cmCMakePresetsGraphInternal::PresetConditionHelper, false);
81 }
82
83 namespace cmCMakePresetsGraphInternal {
84 cmCMakePresetsGraph::ReadFileResult PackagePresetsHelper(
85   std::vector<cmCMakePresetsGraph::PackagePreset>& out,
86   const Json::Value* value)
87 {
88   static auto const helper =
89     cmJSONHelperBuilder<ReadFileResult>::Vector<PackagePreset>(
90       ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
91       PackagePresetHelper);
92
93   return helper(out, value);
94 }
95 }