CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmCMakePresetsGraphReadJSONWorkflowPresets.cxx
blobe1528710ab29950088ecb639808de77d11b067fa
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 <string>
5 #include <vector>
7 #include <cmext/string_view>
9 #include <cm3p/json/value.h>
11 #include "cmCMakePresetsErrors.h"
12 #include "cmCMakePresetsGraph.h"
13 #include "cmCMakePresetsGraphInternal.h"
14 #include "cmJSONHelpers.h"
16 class cmJSONState;
18 namespace {
19 using WorkflowPreset = cmCMakePresetsGraph::WorkflowPreset;
21 bool WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type& out,
22 const Json::Value* value, cmJSONState* state)
24 if (!value) {
25 cmCMakePresetsErrors::INVALID_PRESET(value, state);
26 return false;
29 if (!value->isString()) {
30 return false;
33 if (value->asString() == "configure") {
34 out = WorkflowPreset::WorkflowStep::Type::Configure;
35 return true;
38 if (value->asString() == "build") {
39 out = WorkflowPreset::WorkflowStep::Type::Build;
40 return true;
43 if (value->asString() == "test") {
44 out = WorkflowPreset::WorkflowStep::Type::Test;
45 return true;
48 if (value->asString() == "package") {
49 out = WorkflowPreset::WorkflowStep::Type::Package;
50 return true;
53 cmCMakePresetsErrors::INVALID_PRESET(value, state);
54 return false;
57 auto const WorkflowStepHelper =
58 cmJSONHelperBuilder::Object<WorkflowPreset::WorkflowStep>(
59 JsonErrors::INVALID_OBJECT, false)
60 .Bind("type"_s, &WorkflowPreset::WorkflowStep::PresetType,
61 WorkflowStepTypeHelper)
62 .Bind("name"_s, &WorkflowPreset::WorkflowStep::PresetName,
63 cmCMakePresetsGraphInternal::PresetStringHelper);
65 auto const WorkflowStepsHelper =
66 cmJSONHelperBuilder::Vector<WorkflowPreset::WorkflowStep>(
67 cmCMakePresetsErrors::INVALID_PRESET, WorkflowStepHelper);
69 auto const WorkflowPresetHelper =
70 cmJSONHelperBuilder::Object<WorkflowPreset>(
71 cmCMakePresetsErrors::INVALID_PRESET_OBJECT, false)
72 .Bind("name"_s, &WorkflowPreset::Name,
73 cmCMakePresetsGraphInternal::PresetNameHelper)
74 .Bind<std::nullptr_t>("vendor"_s, nullptr,
75 cmCMakePresetsGraphInternal::VendorHelper(
76 cmCMakePresetsErrors::INVALID_PRESET),
77 false)
78 .Bind("displayName"_s, &WorkflowPreset::DisplayName,
79 cmCMakePresetsGraphInternal::PresetStringHelper, false)
80 .Bind("description"_s, &WorkflowPreset::Description,
81 cmCMakePresetsGraphInternal::PresetStringHelper, false)
82 .Bind("steps"_s, &WorkflowPreset::Steps, WorkflowStepsHelper);
85 namespace cmCMakePresetsGraphInternal {
86 bool WorkflowPresetsHelper(
87 std::vector<cmCMakePresetsGraph::WorkflowPreset>& out,
88 const Json::Value* value, cmJSONState* state)
90 static auto const helper = cmJSONHelperBuilder::Vector<WorkflowPreset>(
91 cmCMakePresetsErrors::INVALID_PRESETS, WorkflowPresetHelper);
93 return helper(out, value, state);