/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 "cmCMakePresetsErrors.h" |
11 | | #include "cmCMakePresetsGraph.h" |
12 | | #include "cmCMakePresetsGraphInternal.h" |
13 | | #include "cmJSONHelpers.h" |
14 | | |
15 | | class cmJSONState; |
16 | | |
17 | | namespace Json { |
18 | | class Value; |
19 | | } |
20 | | |
21 | | namespace { |
22 | | using WorkflowPreset = cmCMakePresetsGraph::WorkflowPreset; |
23 | | |
24 | | bool WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type& out, |
25 | | Json::Value const* value, cmJSONState* state) |
26 | 28.4k | { |
27 | 28.4k | if (!value) { |
28 | 0 | cmCMakePresetsErrors::INVALID_PRESET(value, state); |
29 | 0 | return false; |
30 | 0 | } |
31 | | |
32 | 28.4k | std::string workflowType; |
33 | 28.4k | if (!cmCMakePresetsGraphInternal::PresetStringHelper(workflowType, value, |
34 | 28.4k | state)) { |
35 | 3 | return false; |
36 | 3 | } |
37 | | |
38 | 28.4k | if (workflowType == "configure") { |
39 | 5.70k | out = WorkflowPreset::WorkflowStep::Type::Configure; |
40 | 5.70k | return true; |
41 | 5.70k | } |
42 | | |
43 | 22.7k | if (workflowType == "build") { |
44 | 2.38k | out = WorkflowPreset::WorkflowStep::Type::Build; |
45 | 2.38k | return true; |
46 | 2.38k | } |
47 | | |
48 | 20.3k | if (workflowType == "test") { |
49 | 3.88k | out = WorkflowPreset::WorkflowStep::Type::Test; |
50 | 3.88k | return true; |
51 | 3.88k | } |
52 | | |
53 | 16.5k | if (workflowType == "package") { |
54 | 2.36k | out = WorkflowPreset::WorkflowStep::Type::Package; |
55 | 2.36k | return true; |
56 | 2.36k | } |
57 | | |
58 | 14.1k | cmCMakePresetsErrors::INVALID_PRESET(value, state); |
59 | 14.1k | return false; |
60 | 16.5k | } |
61 | | |
62 | | auto const WorkflowStepHelper = |
63 | | cmJSONHelperBuilder::Object<WorkflowPreset::WorkflowStep>( |
64 | | JsonErrors::INVALID_OBJECT, false) |
65 | | .Bind("type"_s, &WorkflowPreset::WorkflowStep::PresetType, |
66 | | WorkflowStepTypeHelper) |
67 | | .Bind("name"_s, &WorkflowPreset::WorkflowStep::PresetName, |
68 | | cmCMakePresetsGraphInternal::PresetStringHelper); |
69 | | |
70 | | auto const WorkflowStepsHelper = |
71 | | cmJSONHelperBuilder::Vector<WorkflowPreset::WorkflowStep>( |
72 | | cmCMakePresetsErrors::INVALID_PRESET, WorkflowStepHelper); |
73 | | |
74 | | auto const WorkflowPresetHelper = |
75 | | cmJSONHelperBuilder::Object<WorkflowPreset>( |
76 | | cmCMakePresetsErrors::INVALID_PRESET_OBJECT, false) |
77 | | .Bind("name"_s, &WorkflowPreset::Name, |
78 | | cmCMakePresetsGraphInternal::PresetNameHelper) |
79 | | .Bind<std::nullptr_t>("vendor"_s, nullptr, |
80 | | cmCMakePresetsGraphInternal::VendorHelper( |
81 | | cmCMakePresetsErrors::INVALID_PRESET), |
82 | | false) |
83 | | .Bind("displayName"_s, &WorkflowPreset::DisplayName, |
84 | | cmCMakePresetsGraphInternal::PresetStringHelper, false) |
85 | | .Bind("description"_s, &WorkflowPreset::Description, |
86 | | cmCMakePresetsGraphInternal::PresetStringHelper, false) |
87 | | .Bind("steps"_s, &WorkflowPreset::Steps, WorkflowStepsHelper); |
88 | | } |
89 | | |
90 | | namespace cmCMakePresetsGraphInternal { |
91 | | bool WorkflowPresetsHelper( |
92 | | std::vector<cmCMakePresetsGraph::WorkflowPreset>& out, |
93 | | Json::Value const* value, cmJSONState* state) |
94 | 26.6k | { |
95 | 26.6k | static auto const helper = cmJSONHelperBuilder::Vector<WorkflowPreset>( |
96 | 26.6k | cmCMakePresetsErrors::INVALID_PRESETS, WorkflowPresetHelper); |
97 | | |
98 | 26.6k | return helper(out, value, state); |
99 | 26.6k | } |
100 | | } |