cmCMakePresetsGraphReadJSONWorkflowPresets.cxx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. #include <cmext/string_view>
  8. #include <cm3p/json/value.h>
  9. #include "cmCMakePresetsErrors.h"
  10. #include "cmCMakePresetsGraph.h"
  11. #include "cmCMakePresetsGraphInternal.h"
  12. #include "cmJSONHelpers.h"
  13. class cmJSONState;
  14. namespace {
  15. using WorkflowPreset = cmCMakePresetsGraph::WorkflowPreset;
  16. bool WorkflowStepTypeHelper(WorkflowPreset::WorkflowStep::Type& out,
  17. Json::Value const* value, cmJSONState* state)
  18. {
  19. if (!value) {
  20. cmCMakePresetsErrors::INVALID_PRESET(value, state);
  21. return false;
  22. }
  23. if (!value->isString()) {
  24. return false;
  25. }
  26. if (value->asString() == "configure") {
  27. out = WorkflowPreset::WorkflowStep::Type::Configure;
  28. return true;
  29. }
  30. if (value->asString() == "build") {
  31. out = WorkflowPreset::WorkflowStep::Type::Build;
  32. return true;
  33. }
  34. if (value->asString() == "test") {
  35. out = WorkflowPreset::WorkflowStep::Type::Test;
  36. return true;
  37. }
  38. if (value->asString() == "package") {
  39. out = WorkflowPreset::WorkflowStep::Type::Package;
  40. return true;
  41. }
  42. cmCMakePresetsErrors::INVALID_PRESET(value, state);
  43. return false;
  44. }
  45. auto const WorkflowStepHelper =
  46. cmJSONHelperBuilder::Object<WorkflowPreset::WorkflowStep>(
  47. JsonErrors::INVALID_OBJECT, false)
  48. .Bind("type"_s, &WorkflowPreset::WorkflowStep::PresetType,
  49. WorkflowStepTypeHelper)
  50. .Bind("name"_s, &WorkflowPreset::WorkflowStep::PresetName,
  51. cmCMakePresetsGraphInternal::PresetStringHelper);
  52. auto const WorkflowStepsHelper =
  53. cmJSONHelperBuilder::Vector<WorkflowPreset::WorkflowStep>(
  54. cmCMakePresetsErrors::INVALID_PRESET, WorkflowStepHelper);
  55. auto const WorkflowPresetHelper =
  56. cmJSONHelperBuilder::Object<WorkflowPreset>(
  57. cmCMakePresetsErrors::INVALID_PRESET_OBJECT, false)
  58. .Bind("name"_s, &WorkflowPreset::Name,
  59. cmCMakePresetsGraphInternal::PresetNameHelper)
  60. .Bind<std::nullptr_t>("vendor"_s, nullptr,
  61. cmCMakePresetsGraphInternal::VendorHelper(
  62. cmCMakePresetsErrors::INVALID_PRESET),
  63. false)
  64. .Bind("displayName"_s, &WorkflowPreset::DisplayName,
  65. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  66. .Bind("description"_s, &WorkflowPreset::Description,
  67. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  68. .Bind("steps"_s, &WorkflowPreset::Steps, WorkflowStepsHelper);
  69. }
  70. namespace cmCMakePresetsGraphInternal {
  71. bool WorkflowPresetsHelper(
  72. std::vector<cmCMakePresetsGraph::WorkflowPreset>& out,
  73. Json::Value const* value, cmJSONState* state)
  74. {
  75. static auto const helper = cmJSONHelperBuilder::Vector<WorkflowPreset>(
  76. cmCMakePresetsErrors::INVALID_PRESETS, WorkflowPresetHelper);
  77. return helper(out, value, state);
  78. }
  79. }