1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
8 #include <cmext/string_view>
10 #include <cm3p/json/value.h>
12 #include "cmCMakePresetsGraph.h"
13 #include "cmCMakePresetsGraphInternal.h"
14 #include "cmJSONHelpers.h"
17 using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
18 using WorkflowPreset = cmCMakePresetsGraph::WorkflowPreset;
20 ReadFileResult WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type& out,
21 const Json::Value* value)
24 return ReadFileResult::INVALID_PRESET;
27 if (!value->isString()) {
28 return ReadFileResult::INVALID_PRESET;
31 if (value->asString() == "configure") {
32 out = WorkflowPreset::WorkflowStep::Type::Configure;
33 return ReadFileResult::READ_OK;
36 if (value->asString() == "build") {
37 out = WorkflowPreset::WorkflowStep::Type::Build;
38 return ReadFileResult::READ_OK;
41 if (value->asString() == "test") {
42 out = WorkflowPreset::WorkflowStep::Type::Test;
43 return ReadFileResult::READ_OK;
46 if (value->asString() == "package") {
47 out = WorkflowPreset::WorkflowStep::Type::Package;
48 return ReadFileResult::READ_OK;
51 return ReadFileResult::INVALID_PRESET;
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);
62 auto const WorkflowStepsHelper =
63 cmJSONHelperBuilder<ReadFileResult>::Vector<WorkflowPreset::WorkflowStep>(
64 ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET,
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),
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);
83 namespace cmCMakePresetsGraphInternal {
84 cmCMakePresetsGraph::ReadFileResult WorkflowPresetsHelper(
85 std::vector<cmCMakePresetsGraph::WorkflowPreset>& out,
86 const Json::Value* value)
88 static auto const helper =
89 cmJSONHelperBuilder<ReadFileResult>::Vector<WorkflowPreset>(
90 ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
91 WorkflowPresetHelper);
93 return helper(out, value);