1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
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"
19 using WorkflowPreset
= cmCMakePresetsGraph::WorkflowPreset
;
21 bool WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type
& out
,
22 const Json::Value
* value
, cmJSONState
* state
)
25 cmCMakePresetsErrors::INVALID_PRESET(value
, state
);
29 if (!value
->isString()) {
33 if (value
->asString() == "configure") {
34 out
= WorkflowPreset::WorkflowStep::Type::Configure
;
38 if (value
->asString() == "build") {
39 out
= WorkflowPreset::WorkflowStep::Type::Build
;
43 if (value
->asString() == "test") {
44 out
= WorkflowPreset::WorkflowStep::Type::Test
;
48 if (value
->asString() == "package") {
49 out
= WorkflowPreset::WorkflowStep::Type::Package
;
53 cmCMakePresetsErrors::INVALID_PRESET(value
, state
);
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
),
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
);