Caffa  1.1.0
C++ Application Framework for Embedded Systems with introspection
cafFieldJsonCapabilitySpecializations.h
1 #pragma once
2 
3 #include "cafChildArrayField.h"
4 #include "cafChildField.h"
5 #include "cafFieldJsonCapability.h"
6 
7 #include <nlohmann/json.hpp>
8 
9 #include <concepts>
10 #include <string>
11 #include <typeinfo>
12 
13 namespace caffa
14 {
15 class JsonSerializer;
16 
17 template <typename FieldType>
19 {
20 public:
21  FieldJsonCap()
23  {
24  }
25 
26 public:
27  // Json Serializing
28  void readFromJson( const nlohmann::json& jsonElement, const JsonSerializer& serializer ) override;
29  void writeToJson( nlohmann::json& jsonElement, const JsonSerializer& serializer ) const override;
30  const FieldHandle* owner() const override;
31  void setOwner( FieldHandle* owner ) override;
32  nlohmann::json jsonType() const override;
33 
34 private:
35  FieldType* m_field;
36 };
37 
38 template <typename DataType>
39 class FieldJsonCap<ChildField<DataType*>> : public FieldJsonCapability
40 {
42 
43 public:
44  FieldJsonCap()
46  {
47  }
48 
49 public:
50  // Json Serializing
51  void readFromJson( const nlohmann::json& jsonElement, const JsonSerializer& serializer ) override;
52  void writeToJson( nlohmann::json& jsonElement, const JsonSerializer& serializer ) const override;
53  const FieldHandle* owner() const override;
54  void setOwner( FieldHandle* owner ) override;
55  nlohmann::json jsonType() const override;
56 
57 private:
58  FieldType* m_field;
59 };
60 
61 template <typename DataType>
63 {
65 
66 public:
67  FieldJsonCap()
69  {
70  }
71 
72 public:
73  // Json Serializing
74  void readFromJson( const nlohmann::json& jsonElement, const JsonSerializer& serializer ) override;
75  void writeToJson( nlohmann::json& jsonElement, const JsonSerializer& serializer ) const override;
76  const FieldHandle* owner() const override;
77  void setOwner( FieldHandle* owner ) override;
78  nlohmann::json jsonType() const override;
79 
80 private:
81  FieldType* m_field;
82 };
83 
84 template <typename FieldType>
85 void AddIoCapabilityToField( FieldType* field )
86 {
87  if ( !field->template capability<FieldJsonCapability>() )
88  {
89  field->addCapability( std::make_unique<FieldJsonCap<FieldType>>() );
90  }
91 }
92 
93 } // End of namespace caffa
94 
95 #include "cafFieldJsonCapabilitySpecializations.inl"
Field class to handle a pointer to a caffa Object.
Definition: cafChildField.h:44
Definition: cafFieldJsonCapability.h:23
Definition: cafFieldJsonCapabilitySpecializations.h:18
Base class for all fields, making it possible to handle them generically.
Definition: cafFieldHandle.h:19
Field class to handle a collection of Object derived pointers The ChildArrayField will take over owne...
Definition: cafChildArrayField.h:41
Definition: cafJsonSerializer.h:38
void readFromJson(const nlohmann::json &jsonElement, const JsonSerializer &serializer) override
Definition: cafFieldJsonCapabilitySpecializations.inl:20
Main Caffa namespace.
Definition: cafApplication.h:30