cmCMakePresetsGraphReadJSONBuildPresets.cxx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 <map>
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include <cm/optional>
  10. #include <cmext/string_view>
  11. #include <cm3p/json/value.h>
  12. #include "cmCMakePresetsGraph.h"
  13. #include "cmCMakePresetsGraphInternal.h"
  14. #include "cmJSONHelpers.h"
  15. namespace {
  16. using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
  17. using BuildPreset = cmCMakePresetsGraph::BuildPreset;
  18. auto const BuildPresetHelper =
  19. cmJSONObjectHelper<BuildPreset, ReadFileResult>(
  20. ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
  21. .Bind("name"_s, &BuildPreset::Name,
  22. cmCMakePresetsGraphInternal::PresetStringHelper)
  23. .Bind("inherits"_s, &BuildPreset::Inherits,
  24. cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
  25. false)
  26. .Bind("hidden"_s, &BuildPreset::Hidden,
  27. cmCMakePresetsGraphInternal::PresetBoolHelper, false)
  28. .Bind<std::nullptr_t>("vendor"_s, nullptr,
  29. cmCMakePresetsGraphInternal::VendorHelper(
  30. ReadFileResult::INVALID_PRESET),
  31. false)
  32. .Bind("displayName"_s, &BuildPreset::DisplayName,
  33. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  34. .Bind("description"_s, &BuildPreset::Description,
  35. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  36. .Bind("environment"_s, &BuildPreset::Environment,
  37. cmCMakePresetsGraphInternal::EnvironmentMapHelper, false)
  38. .Bind("configurePreset"_s, &BuildPreset::ConfigurePreset,
  39. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  40. .Bind("inheritConfigureEnvironment"_s,
  41. &BuildPreset::InheritConfigureEnvironment,
  42. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  43. .Bind("jobs"_s, &BuildPreset::Jobs,
  44. cmCMakePresetsGraphInternal::PresetOptionalIntHelper, false)
  45. .Bind("targets"_s, &BuildPreset::Targets,
  46. cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
  47. false)
  48. .Bind("configuration"_s, &BuildPreset::Configuration,
  49. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  50. .Bind("cleanFirst"_s, &BuildPreset::CleanFirst,
  51. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  52. .Bind("verbose"_s, &BuildPreset::Verbose,
  53. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  54. .Bind("nativeToolOptions"_s, &BuildPreset::NativeToolOptions,
  55. cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
  56. .Bind("condition"_s, &BuildPreset::ConditionEvaluator,
  57. cmCMakePresetsGraphInternal::PresetConditionHelper, false);
  58. }
  59. namespace cmCMakePresetsGraphInternal {
  60. ReadFileResult BuildPresetsHelper(std::vector<BuildPreset>& out,
  61. const Json::Value* value)
  62. {
  63. static auto const helper = cmJSONVectorHelper<BuildPreset, ReadFileResult>(
  64. ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
  65. BuildPresetHelper);
  66. return helper(out, value);
  67. }
  68. }