1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
10 #include <cm/optional>
11 #include <cmext/string_view>
13 #include <cm3p/json/value.h>
15 #include "cmCMakePresetsGraph.h"
16 #include "cmCMakePresetsGraphInternal.h"
17 #include "cmJSONHelpers.h"
20 using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
21 using PackagePreset = cmCMakePresetsGraph::PackagePreset;
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);
31 auto const VariableHelper = cmJSONHelperBuilder<ReadFileResult>::String(
32 ReadFileResult::READ_OK, ReadFileResult::INVALID_VARIABLE);
34 auto const VariablesHelper =
35 cmJSONHelperBuilder<ReadFileResult>::Map<std::string>(
36 ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, VariableHelper);
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,
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),
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);
83 namespace cmCMakePresetsGraphInternal {
84 cmCMakePresetsGraph::ReadFileResult PackagePresetsHelper(
85 std::vector<cmCMakePresetsGraph::PackagePreset>& out,
86 const Json::Value* value)
88 static auto const helper =
89 cmJSONHelperBuilder<ReadFileResult>::Vector<PackagePreset>(
90 ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
93 return helper(out, value);