cmCMakePresetsGraphReadJSONPackagePresets.cxx 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 <map>
  5. #include <memory>
  6. #include <string>
  7. #include <vector>
  8. #include <cm/optional>
  9. #include <cmext/string_view>
  10. #include <cm3p/json/value.h>
  11. #include "cmCMakePresetErrors.h"
  12. #include "cmCMakePresetsGraph.h"
  13. #include "cmCMakePresetsGraphInternal.h"
  14. #include "cmJSONHelpers.h"
  15. class cmJSONState;
  16. namespace {
  17. using PackagePreset = cmCMakePresetsGraph::PackagePreset;
  18. auto const OutputHelper =
  19. cmJSONHelperBuilder::Object<PackagePreset>(
  20. JsonErrors::INVALID_NAMED_OBJECT_KEY, false)
  21. .Bind("debug"_s, &PackagePreset::DebugOutput,
  22. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  23. .Bind("verbose"_s, &PackagePreset::VerboseOutput,
  24. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false);
  25. auto const VariableHelper =
  26. cmJSONHelperBuilder::String(cmCMakePresetErrors::INVALID_VARIABLE);
  27. auto const VariablesHelper = cmJSONHelperBuilder::Map<std::string>(
  28. cmCMakePresetErrors::INVALID_VARIABLE, VariableHelper);
  29. auto const PackagePresetHelper =
  30. cmJSONHelperBuilder::Object<PackagePreset>(
  31. cmCMakePresetErrors::INVALID_PRESET_OBJECT, false)
  32. .Bind("name"_s, &PackagePreset::Name,
  33. cmCMakePresetsGraphInternal::PresetNameHelper)
  34. .Bind("inherits"_s, &PackagePreset::Inherits,
  35. cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
  36. false)
  37. .Bind("hidden"_s, &PackagePreset::Hidden,
  38. cmCMakePresetsGraphInternal::PresetBoolHelper, false)
  39. .Bind<std::nullptr_t>("vendor"_s, nullptr,
  40. cmCMakePresetsGraphInternal::VendorHelper(
  41. cmCMakePresetErrors::INVALID_PRESET),
  42. false)
  43. .Bind("displayName"_s, &PackagePreset::DisplayName,
  44. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  45. .Bind("description"_s, &PackagePreset::Description,
  46. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  47. .Bind("environment"_s, &PackagePreset::Environment,
  48. cmCMakePresetsGraphInternal::EnvironmentMapHelper, false)
  49. .Bind("configurePreset"_s, &PackagePreset::ConfigurePreset,
  50. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  51. .Bind("inheritConfigureEnvironment"_s,
  52. &PackagePreset::InheritConfigureEnvironment,
  53. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  54. .Bind("generators"_s, &PackagePreset::Generators,
  55. cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
  56. .Bind("configurations"_s, &PackagePreset::Configurations,
  57. cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
  58. .Bind("variables"_s, &PackagePreset::Variables, VariablesHelper, false)
  59. .Bind("configFile"_s, &PackagePreset::ConfigFile,
  60. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  61. .Bind("output"_s, OutputHelper, false)
  62. .Bind("packageName"_s, &PackagePreset::PackageName,
  63. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  64. .Bind("packageVersion"_s, &PackagePreset::PackageVersion,
  65. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  66. .Bind("packageDirectory"_s, &PackagePreset::PackageDirectory,
  67. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  68. .Bind("vendorName"_s, &PackagePreset::VendorName,
  69. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  70. .Bind("condition"_s, &PackagePreset::ConditionEvaluator,
  71. cmCMakePresetsGraphInternal::PresetConditionHelper, false);
  72. }
  73. namespace cmCMakePresetsGraphInternal {
  74. bool PackagePresetsHelper(std::vector<cmCMakePresetsGraph::PackagePreset>& out,
  75. const Json::Value* value, cmJSONState* state)
  76. {
  77. static auto const helper = cmJSONHelperBuilder::Vector<PackagePreset>(
  78. cmCMakePresetErrors::INVALID_PRESETS, PackagePresetHelper);
  79. return helper(out, value, state);
  80. }
  81. }