/src/CMake/Source/cmCMakePresetsGraphReadJSONWorkflowPresets.cxx
Line | Count | Source |
1 | | /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
2 | | file LICENSE.rst or https://cmake.org/licensing for details. */ |
3 | | #include <cstddef> |
4 | | #include <functional> |
5 | | #include <string> |
6 | | #include <vector> |
7 | | |
8 | | #include <cmext/string_view> |
9 | | |
10 | | #include <cm3p/json/value.h> |
11 | | |
12 | | #include "cmCMakePresetsErrors.h" |
13 | | #include "cmCMakePresetsGraph.h" |
14 | | #include "cmCMakePresetsGraphInternal.h" |
15 | | #include "cmJSONHelpers.h" |
16 | | |
17 | | class cmJSONState; |
18 | | |
19 | | namespace { |
20 | | using WorkflowPreset = cmCMakePresetsGraph::WorkflowPreset; |
21 | | |
22 | | bool WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type& out, |
23 | | Json::Value const* value, cmJSONState* state) |
24 | 0 | { |
25 | 0 | if (!value) { |
26 | 0 | cmCMakePresetsErrors::INVALID_PRESET(value, state); |
27 | 0 | return false; |
28 | 0 | } |
29 | | |
30 | 0 | if (!value->isString()) { |
31 | 0 | return false; |
32 | 0 | } |
33 | | |
34 | 0 | if (value->asString() == "configure") { |
35 | 0 | out = WorkflowPreset::WorkflowStep::Type::Configure; |
36 | 0 | return true; |
37 | 0 | } |
38 | | |
39 | 0 | if (value->asString() == "build") { |
40 | 0 | out = WorkflowPreset::WorkflowStep::Type::Build; |
41 | 0 | return true; |
42 | 0 | } |
43 | | |
44 | 0 | if (value->asString() == "test") { |
45 | 0 | out = WorkflowPreset::WorkflowStep::Type::Test; |
46 | 0 | return true; |
47 | 0 | } |
48 | | |
49 | 0 | if (value->asString() == "package") { |
50 | 0 | out = WorkflowPreset::WorkflowStep::Type::Package; |
51 | 0 | return true; |
52 | 0 | } |
53 | | |
54 | 0 | cmCMakePresetsErrors::INVALID_PRESET(value, state); |
55 | 0 | return false; |
56 | 0 | } |
57 | | |
58 | | auto const WorkflowStepHelper = |
59 | | cmJSONHelperBuilder::Object<WorkflowPreset::WorkflowStep>( |
60 | | JsonErrors::INVALID_OBJECT, false) |
61 | | .Bind("type"_s, &WorkflowPreset::WorkflowStep::PresetType, |
62 | | WorkflowStepTypeHelper) |
63 | | .Bind("name"_s, &WorkflowPreset::WorkflowStep::PresetName, |
64 | | cmCMakePresetsGraphInternal::PresetStringHelper); |
65 | | |
66 | | auto const WorkflowStepsHelper = |
67 | | cmJSONHelperBuilder::Vector<WorkflowPreset::WorkflowStep>( |
68 | | cmCMakePresetsErrors::INVALID_PRESET, WorkflowStepHelper); |
69 | | |
70 | | auto const WorkflowPresetHelper = |
71 | | cmJSONHelperBuilder::Object<WorkflowPreset>( |
72 | | cmCMakePresetsErrors::INVALID_PRESET_OBJECT, false) |
73 | | .Bind("name"_s, &WorkflowPreset::Name, |
74 | | cmCMakePresetsGraphInternal::PresetNameHelper) |
75 | | .Bind<std::nullptr_t>("vendor"_s, nullptr, |
76 | | cmCMakePresetsGraphInternal::VendorHelper( |
77 | | cmCMakePresetsErrors::INVALID_PRESET), |
78 | | false) |
79 | | .Bind("displayName"_s, &WorkflowPreset::DisplayName, |
80 | | cmCMakePresetsGraphInternal::PresetStringHelper, false) |
81 | | .Bind("description"_s, &WorkflowPreset::Description, |
82 | | cmCMakePresetsGraphInternal::PresetStringHelper, false) |
83 | | .Bind("steps"_s, &WorkflowPreset::Steps, WorkflowStepsHelper); |
84 | | } |
85 | | |
86 | | namespace cmCMakePresetsGraphInternal { |
87 | | bool WorkflowPresetsHelper( |
88 | | std::vector<cmCMakePresetsGraph::WorkflowPreset>& out, |
89 | | Json::Value const* value, cmJSONState* state) |
90 | 0 | { |
91 | 0 | static auto const helper = cmJSONHelperBuilder::Vector<WorkflowPreset>( |
92 | 0 | cmCMakePresetsErrors::INVALID_PRESETS, WorkflowPresetHelper); |
93 | |
|
94 | 0 | return helper(out, value, state); |
95 | 0 | } |
96 | | } |