SerializableJSONEvent.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Company: Lynar Studios
  4. * E-Mail: webmaster@lynarstudios.com
  5. * Created: 2020-12-07
  6. * Changed: 2020-12-20
  7. *
  8. * */
  9. #include <ls_std/serialization/event/SerializableJSONEvent.hpp>
  10. #include <ls_std/exception/NullPointerException.hpp>
  11. ls_std::SerializableJSONEvent::SerializableJSONEvent(const std::shared_ptr<ls_std::Event>& _value) :
  12. ls_std::Class("SerializableJSONEvent")
  13. {
  14. this->_assignValue(_value);
  15. }
  16. ls_std::byte_field ls_std::SerializableJSONEvent::marshal()
  17. {
  18. this->_update();
  19. return this->jsonObject.dump();
  20. }
  21. void ls_std::SerializableJSONEvent::unmarshal(const ls_std::byte_field &_data)
  22. {
  23. this->jsonObject = nlohmann::json::parse(_data);
  24. this->value->setId(this->jsonObject["id"]);
  25. this->_unmarshalParameterList();
  26. }
  27. std::shared_ptr<ls_std::Event> ls_std::SerializableJSONEvent::getValue()
  28. {
  29. return this->value;
  30. }
  31. void ls_std::SerializableJSONEvent::setValue(const std::shared_ptr<ls_std::Event>& _value)
  32. {
  33. this->_assignValue(_value);
  34. }
  35. void ls_std::SerializableJSONEvent::_assignValue(const std::shared_ptr<ls_std::Event> &_value)
  36. {
  37. if(_value == nullptr) {
  38. throw ls_std::NullPointerException {};
  39. }
  40. this->value = _value;
  41. }
  42. void ls_std::SerializableJSONEvent::_unmarshalParameterList()
  43. {
  44. this->value->clearParameterList();
  45. for(const auto& parameterJSON : this->jsonObject["parameterList"]) {
  46. ls_std::event_parameter parameter = {parameterJSON.at(0), parameterJSON.at(1)};
  47. this->value->addParameter(parameter);
  48. }
  49. }
  50. void ls_std::SerializableJSONEvent::_update()
  51. {
  52. this->jsonObject = {
  53. {"id", this->value->getId()}
  54. };
  55. this->_updateEventParameterList();
  56. }
  57. void ls_std::SerializableJSONEvent::_updateEventParameterList()
  58. {
  59. std::string jsonString {};
  60. for(const auto& eventParameter : this->value->getParameterList()) {
  61. nlohmann::json parameterJson = {eventParameter.first, eventParameter.second};
  62. this->jsonObject["parameterList"][eventParameter.first] = parameterJson;
  63. }
  64. }