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 Serializer;
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 Serializer& serializer ) override;
29  void writeToJson( nlohmann::json& jsonElement, const Serializer& serializer ) const override;
30  const FieldHandle* owner() const override;
31  void setOwner( FieldHandle* owner ) override;
32 
33 private:
34  FieldType* m_field;
35 };
36 
37 template <typename DataType>
38 class FieldJsonCap<ChildField<DataType*>> : public FieldJsonCapability
39 {
41 
42 public:
43  FieldJsonCap()
45  {
46  }
47 
48 public:
49  // Json Serializing
50  void readFromJson( const nlohmann::json& jsonElement, const Serializer& serializer ) override;
51  void writeToJson( nlohmann::json& jsonElement, const Serializer& serializer ) const override;
52  const FieldHandle* owner() const override;
53  void setOwner( FieldHandle* owner ) override;
54 
55 private:
56  FieldType* m_field;
57 };
58 
59 template <typename DataType>
61 {
63 
64 public:
65  FieldJsonCap()
67  {
68  }
69 
70 public:
71  // Json Serializing
72  void readFromJson( const nlohmann::json& jsonElement, const Serializer& serializer ) override;
73  void writeToJson( nlohmann::json& jsonElement, const Serializer& serializer ) const override;
74  const FieldHandle* owner() const override;
75  void setOwner( FieldHandle* owner ) override;
76 
77 private:
78  FieldType* m_field;
79 };
80 
81 template <typename FieldType>
82 void AddIoCapabilityToField( FieldType* field )
83 {
84  if ( !field->template capability<FieldJsonCapability>() )
85  {
86  field->addCapability( std::make_unique<FieldJsonCap<FieldType>>() );
87  }
88 }
89 
90 } // End of namespace caffa
91 
92 #include "cafFieldJsonCapabilitySpecializations.inl"
Field class to handle a collection of Object derived pointers The ChildArrayField will take over owne...
Definition: cafChildArrayField.h:24
Field class to handle a pointer to a caffa Object.
Definition: cafChildField.h:27
Base class for all fields, making it possible to handle them generically.
Definition: cafFieldHandle.h:23
Definition: cafFieldJsonCapabilitySpecializations.h:19
void readFromJson(const nlohmann::json &jsonElement, const Serializer &serializer) override
Definition: cafFieldJsonCapabilitySpecializations.inl:24
Definition: cafFieldJsonCapability.h:24
Definition: cafSerializer.h:36
Main Caffa namespace.
Definition: __init__.py:1