resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmCMakePresetsGraphReadJSONWorkflowPresets.cxx
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 <functional>
5 #include <string>
6 #include <vector>
7
8 #include <cmext/string_view>
9
10 #include <cm3p/json/value.h>
11
12 #include "cmCMakePresetsGraph.h"
13 #include "cmCMakePresetsGraphInternal.h"
14 #include "cmJSONHelpers.h"
15
16 namespace {
17 using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
18 using WorkflowPreset = cmCMakePresetsGraph::WorkflowPreset;
19
20 ReadFileResult WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type& out,
21                                       const Json::Value* value)
22 {
23   if (!value) {
24     return ReadFileResult::INVALID_PRESET;
25   }
26
27   if (!value->isString()) {
28     return ReadFileResult::INVALID_PRESET;
29   }
30
31   if (value->asString() == "configure") {
32     out = WorkflowPreset::WorkflowStep::Type::Configure;
33     return ReadFileResult::READ_OK;
34   }
35
36   if (value->asString() == "build") {
37     out = WorkflowPreset::WorkflowStep::Type::Build;
38     return ReadFileResult::READ_OK;
39   }
40
41   if (value->asString() == "test") {
42     out = WorkflowPreset::WorkflowStep::Type::Test;
43     return ReadFileResult::READ_OK;
44   }
45
46   if (value->asString() == "package") {
47     out = WorkflowPreset::WorkflowStep::Type::Package;
48     return ReadFileResult::READ_OK;
49   }
50
51   return ReadFileResult::INVALID_PRESET;
52 }
53
54 auto const WorkflowStepHelper =
55   cmJSONHelperBuilder<ReadFileResult>::Object<WorkflowPreset::WorkflowStep>(
56     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
57     .Bind("type"_s, &WorkflowPreset::WorkflowStep::PresetType,
58           WorkflowStepTypeHelper)
59     .Bind("name"_s, &WorkflowPreset::WorkflowStep::PresetName,
60           cmCMakePresetsGraphInternal::PresetStringHelper);
61
62 auto const WorkflowStepsHelper =
63   cmJSONHelperBuilder<ReadFileResult>::Vector<WorkflowPreset::WorkflowStep>(
64     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET,
65     WorkflowStepHelper);
66
67 auto const WorkflowPresetHelper =
68   cmJSONHelperBuilder<ReadFileResult>::Object<WorkflowPreset>(
69     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
70     .Bind("name"_s, &WorkflowPreset::Name,
71           cmCMakePresetsGraphInternal::PresetStringHelper)
72     .Bind<std::nullptr_t>("vendor"_s, nullptr,
73                           cmCMakePresetsGraphInternal::VendorHelper(
74                             ReadFileResult::INVALID_PRESET),
75                           false)
76     .Bind("displayName"_s, &WorkflowPreset::DisplayName,
77           cmCMakePresetsGraphInternal::PresetStringHelper, false)
78     .Bind("description"_s, &WorkflowPreset::Description,
79           cmCMakePresetsGraphInternal::PresetStringHelper, false)
80     .Bind("steps"_s, &WorkflowPreset::Steps, WorkflowStepsHelper);
81 }
82
83 namespace cmCMakePresetsGraphInternal {
84 cmCMakePresetsGraph::ReadFileResult WorkflowPresetsHelper(
85   std::vector<cmCMakePresetsGraph::WorkflowPreset>& out,
86   const Json::Value* value)
87 {
88   static auto const helper =
89     cmJSONHelperBuilder<ReadFileResult>::Vector<WorkflowPreset>(
90       ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
91       WorkflowPresetHelper);
92
93   return helper(out, value);
94 }
95 }