Conscience Core
CommandExecutionResult.h
Go to the documentation of this file.
1 #ifndef CommandExecutionResult_h
2 #define CommandExecutionResult_h
3 
4 #include "CscCommon.h"
5 #include "../CommandParamsSpec.h"
6 
8 
9 
10 #define COMMAND_RESULT_JSON_SERIALIZER(TClass, ...) \
11  namespace { \
12  bool __registerCommandResultJsonSerializer_##TClass = registerCommandDataJsonSerializer(typeid(TClass), [](const any &objectAny) { \
13  auto logger = CscLogger::getForCategory(#TClass "JsonSerializerFunc"); \
14  const TClass *object = anyToPointer<TClass>(objectAny); \
15  optional<JsonSerializableData> result = {}; \
16  if (object != nullptr) { \
17  map<string, JsonSerializableData> jsonMap; \
18  FOR_EACH(FIELDS_ASSIGN_INTO_JSONMAP_PRINT_NOTYPE, __VA_ARGS__) \
19  result = jsonMap; \
20  } \
21  return result; \
22  }); \
23  }
24 
28 ENUM(CscCommandResultType,
29  RESULT_NONE,
30  RESULT_SEQUENCE,
31  RESULT_POSITIONS,
32  RESULT_FILE,
33  RESULT_STRING,
34  RESULT_BINARY,
35  RESULT_OBJECT,
36  RESULT_LIST,
37  RESULT_BOOL,
38  RESULT_LONG,
39  RESULT_UNSIGNEDLONG,
40  RESULT_DOUBLEFLOAT);
41 ;
42 string commandResultTypeToString(CscCommandResultType type);
43 
45 public:
46  virtual ~CscCommandExecutionResult() = default;
50  virtual DoubleSizedArray encode() const = 0;
51 
52  virtual string encodeToString() const {
53  DoubleSizedArray result = encode();
54  return doubleArrayToString(result.array, result.size);
55  }
56 
57  virtual CscCommandResultType getType() const = 0;
58 
59  virtual string toSummary() const;
60 
64  virtual CscCommandExecutionResult *clone(bool retainData) const {
65  hasPointersOwnership = hasPointersOwnership && !retainData;
66  return doClone();
67  }
68 
69 protected:
70  virtual CscCommandExecutionResult *doClone() const = 0;
71  mutable bool hasPointersOwnership = true;
72 };
73 
75 public:
76  CscCommandExecutionResultDouble(double value);
77  ~CscCommandExecutionResultDouble() override = default;
78  DoubleSizedArray encode() const override;
79  CscCommandResultType getType() const override;
80  string encodeToString() const override;
81  string toSummary() const override;
82  double getValue() const;
83 protected:
84  CscCommandExecutionResult *doClone() const override;
85 private:
86  double value;
87 };
88 
92 template <class TResult>
94 public:
95  CSC_DLL_IMPORTEXPORT CscCommandExecutionResultObject(const TResult *value) : value(value) {}
96  CSC_DLL_IMPORTEXPORT ~CscCommandExecutionResultObject() override { if (hasPointersOwnership && value != nullptr) { delete value; } }
97  CSC_DLL_IMPORTEXPORT DoubleSizedArray encode() const override { throw std::runtime_error("not supported - obsolete feature encode to double array"); }
98  CSC_DLL_IMPORTEXPORT CscCommandResultType getType() const override { return CscCommandResultType::RESULT_OBJECT; }
99  CSC_DLL_IMPORTEXPORT string encodeToString() const override {
100  function<optional<JsonSerializableData>(const any &object)> serializer = getCommandDataJsonSerializer<TResult>();
101  optional<JsonSerializableData> resultJsonValue = serializer(value);
102  if (!resultJsonValue) {
103  return "null";
104  }
105  return jsonSerializableDataToString(resultJsonValue.value());
106  }
107  CSC_DLL_IMPORTEXPORT string toSummary() const override { return encodeToString(); }
108  CSC_DLL_IMPORTEXPORT const TResult *getValue() const { return value; }
109 protected:
110  CscCommandExecutionResult *doClone() const override {
111  return new CscCommandExecutionResultObject(value);
112  }
113 private:
114  const TResult *value;
115 };
116 
117 template <class TResult>
119 public:
120  CSC_DLL_IMPORTEXPORT CscCommandExecutionResultList(const vector<const TResult *> &value) : value(value) {}
121  CSC_DLL_IMPORTEXPORT CscCommandExecutionResultList(const vector<TResult *> &value) : value(vectorOfPointerToConst(value)) {}
123  CSC_DLL_IMPORTEXPORT DoubleSizedArray encode() const override { throw std::runtime_error("not supported - obsolete feature encode to double array"); }
124  CSC_DLL_IMPORTEXPORT CscCommandResultType getType() const override { return CscCommandResultType::RESULT_LIST; }
125  CSC_DLL_IMPORTEXPORT string encodeToString() const override {
126  function<optional<JsonSerializableData>(const any &object)> serializer = getCommandDataJsonSerializer<TResult>();
127  vector<JsonSerializableData> jsonList;
128  for (const TResult *item : value) {
129  optional<JsonSerializableData> resultJsonValue = serializer(item);
130  if (resultJsonValue.has_value()) {
131  jsonList.push_back(resultJsonValue.value());
132  } else {
133  jsonList.push_back(nullptr);
134  }
135  }
136  return vectorToJson(jsonList);
137  }
138  CSC_DLL_IMPORTEXPORT string toSummary() const override { return encodeToString(); }
139  CSC_DLL_IMPORTEXPORT const vector<const TResult *> &getValue() const { return value; }
140 protected:
141  CscCommandExecutionResult *doClone() const override {
142  return new CscCommandExecutionResultList(value);
143  }
144 private:
145  const vector<const TResult *> value;
146 };
147 
149 public:
150  CscCommandExecutionResultBool(bool value);
151  ~CscCommandExecutionResultBool() override = default;
152  DoubleSizedArray encode() const override;
153  CscCommandResultType getType() const override;
154  string encodeToString() const override;
155  string toSummary() const override;
156  bool getValue() const;
157 protected:
158  CscCommandExecutionResult *doClone() const override;
159 private:
160  bool value;
161 };
162 
164 public:
165  CscCommandExecutionResultLong(long long value);
166  ~CscCommandExecutionResultLong() override = default;
167  DoubleSizedArray encode() const override;
168  CscCommandResultType getType() const override;
169  string encodeToString() const override;
170  string toSummary() const override;
171  long long getValue() const;
172 protected:
173  CscCommandExecutionResult *doClone() const override;
174 private:
175  long long value;
176 };
177 
179 public:
180  CscCommandExecutionResultUnsignedLong(unsigned long long value);
181  ~CscCommandExecutionResultUnsignedLong() override = default;
182  DoubleSizedArray encode() const override;
183  CscCommandResultType getType() const override;
184  string encodeToString() const override;
185  string toSummary() const override;
186  unsigned long long getValue() const;
187 protected:
188  CscCommandExecutionResult *doClone() const override;
189 private:
190  unsigned long long value;
191 };
192 
193 }
194 
195 #endif
conscience_core::bridging::commands::result::commandResultTypeToString
string commandResultTypeToString(CscCommandResultType type)
Definition: CommandExecutionResult.cpp:6
conscience_core::bridging::commands::result::CscCommandExecutionResultBool
Definition: CommandExecutionResult.h:148
conscience_utils::doubleArrayToString
string doubleArrayToString(double *doubleArray, int size)
Definition: conscience_util.cpp:74
conscience_core::bridging::commands::result::CscCommandExecutionResultList::getType
CSC_DLL_IMPORTEXPORT CscCommandResultType getType() const override
Definition: CommandExecutionResult.h:124
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:34
conscience_core::bridging::commands::result::CscCommandExecutionResultList::CscCommandExecutionResultList
CSC_DLL_IMPORTEXPORT CscCommandExecutionResultList(const vector< const TResult * > &value)
Definition: CommandExecutionResult.h:120
conscience_core::bridging::commands::result::CscCommandExecutionResultUnsignedLong
Definition: CommandExecutionResult.h:178
conscience_core::bridging::commands::result::CscCommandExecutionResultList::doClone
CscCommandExecutionResult * doClone() const override
Definition: CommandExecutionResult.h:141
conscience_core::bridging::commands::result::ENUM
ENUM(CscCommandResultType, RESULT_NONE, RESULT_SEQUENCE, RESULT_POSITIONS, RESULT_FILE, RESULT_STRING, RESULT_BINARY, RESULT_OBJECT, RESULT_LIST, RESULT_BOOL, RESULT_LONG, RESULT_UNSIGNEDLONG, RESULT_DOUBLEFLOAT)
conscience_core::bridging::commands::result::CscCommandExecutionResult::encodeToString
virtual string encodeToString() const
Definition: CommandExecutionResult.h:52
conscience_core::bridging::commands::result
Definition: CscCommandMetadataBuilder.h:26
conscience_core::bridging::commands::result::CscCommandExecutionResultLong
Definition: CommandExecutionResult.h:163
conscience_core::bridging::commands::result::CscCommandExecutionResultList::encode
CSC_DLL_IMPORTEXPORT DoubleSizedArray encode() const override
Definition: CommandExecutionResult.h:123
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::doClone
CscCommandExecutionResult * doClone() const override
Definition: CommandExecutionResult.h:110
conscience_utils::JSON::jsonSerializableDataToString
string jsonSerializableDataToString(JsonSerializableData data)
Definition: json.cpp:753
jwt::base::details::encode
std::string encode(const std::string &bin, const std::array< char, 64 > &alphabet, const std::string &fill)
Definition: base.h:132
conscience_core::bridging::commands::result::CscCommandExecutionResultList::CscCommandExecutionResultList
CSC_DLL_IMPORTEXPORT CscCommandExecutionResultList(const vector< TResult * > &value)
Definition: CommandExecutionResult.h:121
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::getType
CSC_DLL_IMPORTEXPORT CscCommandResultType getType() const override
Definition: CommandExecutionResult.h:98
conscience_utils::DoubleSizedArray::array
double * array
Definition: conscience_util.h:608
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::encodeToString
CSC_DLL_IMPORTEXPORT string encodeToString() const override
Definition: CommandExecutionResult.h:99
conscience_core::bridging::commands::result::CscCommandExecutionResultDouble
Definition: CommandExecutionResult.h:74
conscience_core::bridging::commands::result::CscCommandExecutionResult::hasPointersOwnership
bool hasPointersOwnership
Definition: CommandExecutionResult.h:71
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::toSummary
CSC_DLL_IMPORTEXPORT string toSummary() const override
Definition: CommandExecutionResult.h:107
conscience_utils::JSON::vectorToJson
string vectorToJson(const vector< JsonSerializableData > &list, bool noNewLines)
Definition: json.cpp:815
conscience_core::bridging::commands::result::CscCommandExecutionResultList::encodeToString
CSC_DLL_IMPORTEXPORT string encodeToString() const override
Definition: CommandExecutionResult.h:125
conscience_utils::DoubleSizedArray::size
unsigned size
Definition: conscience_util.h:609
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::CscCommandExecutionResultObject
CSC_DLL_IMPORTEXPORT CscCommandExecutionResultObject(const TResult *value)
Definition: CommandExecutionResult.h:95
CscCommon.h
conscience_utils::DoubleSizedArray
Definition: conscience_util.h:607
jwt::json::type
type
Generic JSON types used in JWTs.
Definition: jwt.h:1794
conscience_core::bridging::commands::result::CscCommandExecutionResult::clone
virtual CscCommandExecutionResult * clone(bool retainData) const
Definition: CommandExecutionResult.h:64
conscience_core::bridging::commands::result::CscCommandExecutionResult
Definition: CommandExecutionResult.h:44
conscience_core::bridging::commands::result::CscCommandExecutionResultList::toSummary
CSC_DLL_IMPORTEXPORT string toSummary() const override
Definition: CommandExecutionResult.h:138
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::encode
CSC_DLL_IMPORTEXPORT DoubleSizedArray encode() const override
Definition: CommandExecutionResult.h:97
conscience_core::bridging::commands::result::CscCommandExecutionResultList::getValue
const CSC_DLL_IMPORTEXPORT vector< const TResult * > & getValue() const
Definition: CommandExecutionResult.h:139
conscience_utils::vectorOfPointerToConst
vector< const T * > * vectorOfPointerToConst(vector< T * > *theVector)
Definition: conscience_util.h:318
conscience_core::bridging::commands::result::CscCommandExecutionResultList::~CscCommandExecutionResultList
CSC_DLL_IMPORTEXPORT ~CscCommandExecutionResultList() override
Definition: CommandExecutionResult.h:122
conscience_core::bridging::commands::result::CscCommandExecutionResultObject
Definition: CommandExecutionResult.h:93
deleteItems
#define deleteItems(vectorOfItems)
Definition: conscience_util.h:33
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::~CscCommandExecutionResultObject
CSC_DLL_IMPORTEXPORT ~CscCommandExecutionResultObject() override
Definition: CommandExecutionResult.h:96
conscience_core::bridging::commands::result::CscCommandExecutionResultList
Definition: CommandExecutionResult.h:118
conscience_core::bridging::commands::result::CscCommandExecutionResultObject::getValue
const CSC_DLL_IMPORTEXPORT TResult * getValue() const
Definition: CommandExecutionResult.h:108