cmake/Source/cmCMakePresetsGraphReadJSONWorkflowPresets.cxx

96 lines
2.9 KiB
C++
Raw Normal View History

2022-11-16 20:14:03 +01:00
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#include <cstddef>
#include <string>
#include <vector>
#include <cmext/string_view>
#include <cm3p/json/value.h>
2023-12-07 09:12:54 +01:00
#include "cmCMakePresetsErrors.h"
2022-11-16 20:14:03 +01:00
#include "cmCMakePresetsGraph.h"
#include "cmCMakePresetsGraphInternal.h"
#include "cmJSONHelpers.h"
2023-07-02 19:51:09 +02:00
class cmJSONState;
2022-11-16 20:14:03 +01:00
namespace {
using WorkflowPreset = cmCMakePresetsGraph::WorkflowPreset;
2023-07-02 19:51:09 +02:00
bool WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type& out,
const Json::Value* value, cmJSONState* state)
2022-11-16 20:14:03 +01:00
{
if (!value) {
2023-12-07 09:12:54 +01:00
cmCMakePresetsErrors::INVALID_PRESET(value, state);
2023-07-02 19:51:09 +02:00
return false;
2022-11-16 20:14:03 +01:00
}
if (!value->isString()) {
2023-07-02 19:51:09 +02:00
return false;
2022-11-16 20:14:03 +01:00
}
if (value->asString() == "configure") {
out = WorkflowPreset::WorkflowStep::Type::Configure;
2023-07-02 19:51:09 +02:00
return true;
2022-11-16 20:14:03 +01:00
}
if (value->asString() == "build") {
out = WorkflowPreset::WorkflowStep::Type::Build;
2023-07-02 19:51:09 +02:00
return true;
2022-11-16 20:14:03 +01:00
}
if (value->asString() == "test") {
out = WorkflowPreset::WorkflowStep::Type::Test;
2023-07-02 19:51:09 +02:00
return true;
2022-11-16 20:14:03 +01:00
}
if (value->asString() == "package") {
out = WorkflowPreset::WorkflowStep::Type::Package;
2023-07-02 19:51:09 +02:00
return true;
2022-11-16 20:14:03 +01:00
}
2023-12-07 09:12:54 +01:00
cmCMakePresetsErrors::INVALID_PRESET(value, state);
2023-07-02 19:51:09 +02:00
return false;
2022-11-16 20:14:03 +01:00
}
auto const WorkflowStepHelper =
2023-07-02 19:51:09 +02:00
cmJSONHelperBuilder::Object<WorkflowPreset::WorkflowStep>(
JsonErrors::INVALID_OBJECT, false)
2022-11-16 20:14:03 +01:00
.Bind("type"_s, &WorkflowPreset::WorkflowStep::PresetType,
WorkflowStepTypeHelper)
.Bind("name"_s, &WorkflowPreset::WorkflowStep::PresetName,
cmCMakePresetsGraphInternal::PresetStringHelper);
auto const WorkflowStepsHelper =
2023-07-02 19:51:09 +02:00
cmJSONHelperBuilder::Vector<WorkflowPreset::WorkflowStep>(
2023-12-07 09:12:54 +01:00
cmCMakePresetsErrors::INVALID_PRESET, WorkflowStepHelper);
2022-11-16 20:14:03 +01:00
auto const WorkflowPresetHelper =
2023-07-02 19:51:09 +02:00
cmJSONHelperBuilder::Object<WorkflowPreset>(
2023-12-07 09:12:54 +01:00
cmCMakePresetsErrors::INVALID_PRESET_OBJECT, false)
2022-11-16 20:14:03 +01:00
.Bind("name"_s, &WorkflowPreset::Name,
2023-07-02 19:51:09 +02:00
cmCMakePresetsGraphInternal::PresetNameHelper)
2022-11-16 20:14:03 +01:00
.Bind<std::nullptr_t>("vendor"_s, nullptr,
cmCMakePresetsGraphInternal::VendorHelper(
2023-12-07 09:12:54 +01:00
cmCMakePresetsErrors::INVALID_PRESET),
2022-11-16 20:14:03 +01:00
false)
.Bind("displayName"_s, &WorkflowPreset::DisplayName,
cmCMakePresetsGraphInternal::PresetStringHelper, false)
.Bind("description"_s, &WorkflowPreset::Description,
cmCMakePresetsGraphInternal::PresetStringHelper, false)
.Bind("steps"_s, &WorkflowPreset::Steps, WorkflowStepsHelper);
}
namespace cmCMakePresetsGraphInternal {
2023-07-02 19:51:09 +02:00
bool WorkflowPresetsHelper(
2022-11-16 20:14:03 +01:00
std::vector<cmCMakePresetsGraph::WorkflowPreset>& out,
2023-07-02 19:51:09 +02:00
const Json::Value* value, cmJSONState* state)
2022-11-16 20:14:03 +01:00
{
2023-07-02 19:51:09 +02:00
static auto const helper = cmJSONHelperBuilder::Vector<WorkflowPreset>(
2023-12-07 09:12:54 +01:00
cmCMakePresetsErrors::INVALID_PRESETS, WorkflowPresetHelper);
2022-11-16 20:14:03 +01:00
2023-07-02 19:51:09 +02:00
return helper(out, value, state);
2022-11-16 20:14:03 +01:00
}
}