ppap4lmp  0.7.2
add_rename.cpp
Go to the documentation of this file.
1 
9 #include "add_rename.h"
10 #include "../utils/runtime_error.h"
11 
12 namespace ut = utils;
13 
14 /* ------------------------------------------------------------------ */
15 
17  const Str &key_old_,
18  const Str &key_new_)
19 {
20  key_old = key_old_;
21  key_new = key_new_;
22 }
23 
24 /* ------------------------------------------------------------------ */
25 
27  Json &data,
28  JsonToVoidFunc check_required_keys,
29  JsonToBoolFunc check_optional_keys)
30 {
31  check_required_keys(key_old);
32 
33  if (check_optional_keys(key_new) && !do_overwrite)
34  {
35  ut::runtime_error("Key '" + key_new + "' already exists");
36  }
37 
38  if (data.is_array())
39  {
40  for (auto &d : data)
41  {
42  auto it = d.find(key_old);
43  d[key_new] = *it;
44  d.erase(it);
45  }
46  }
47  else
48  {
49  auto it = data.find(key_old);
50  data[key_new] = *it;
51  data.erase(it);
52  }
53 }
54 
55 /* ------------------------------------------------------------------ */
56 
58  bool do_overwrite_)
59 {
60  do_overwrite = do_overwrite_;
61 
62  return std::dynamic_pointer_cast<AddRename>(shared_from_this());
63 }
AddRename(const Str &key_old_, const Str &key_new_)
Constructor of AddRename class.
Definition: add_rename.cpp:16
std::function< bool(const Json &)> JsonToBoolFunc
An alias for a function accepts a Json object and returns a bool.
Definition: updater.h:20
std::string Str
Str is an alias for string.
Definition: std.h:21
virtual void compute_impl(Json &data, JsonToVoidFunc check_required_keys, JsonToBoolFunc check_optional_keys) override
This method overrides Updater::compute_impl.
Definition: add_rename.cpp:26
nlohmann::json Json
Json is an alias for nlohmann::json.
Definition: json.h:22
Str key_new
Definition: add_rename.h:38
AddRename renames an existing property.
Definition: add_rename.h:25
bool do_overwrite
Definition: add_rename.h:30
void runtime_error(const Str &msg)
Raise (for Python) and throw (for C++) a runtime error.
This file has a definition of AddRename class, which is a subclass of Adder class.
Namespace for utility functions.
Definition: join.h:14
ShPtr< AddRename > overwrite(bool do_overwrite_=true)
Allow overwriting an existing property by a renamed property with the same name.
Definition: add_rename.cpp:57
std::function< void(const Json &)> JsonToVoidFunc
An alias for a function accepts a Json object.
Definition: updater.h:18
std::shared_ptr< T > ShPtr
ShPtr is an alias for shared pointer.
Definition: std.h:16
Str key_old
Definition: add_rename.h:34