Conscience Core
CommandResultSpec.h
Go to the documentation of this file.
1 #ifndef CommandExecutionResult_spec_h
2 #define CommandExecutionResult_spec_h
3 
4 #include "../CommandParamsSpec.h"
8 #include "CscCommon.h"
9 #include <shared_mutex>
10 
11 using std::shared_mutex, std::shared_lock, std::unique_lock;
12 
13 #define COMMAND_RESULT_COMMAND_ID_PREFIX "RESULT_"
14 
16 
18 private:
19  CscCommandResultType type;
20  const vector<const CscCommandDataTypeNodeMetadata *> nestedParams;
21  const CscCommandDataTypeMetadata *objectTypeMetadata = nullptr;
22  const string description;
23 
24 public:
25  CscCommandResultMetadata(CscCommandResultType type, const vector<const CscCommandDataTypeNodeMetadata *> &nestedParams, const CscCommandDataTypeMetadata *objectTypeMetadata, const string &description);
27 
31  const CscCommandDataTypeNodeMetadata *getListElementsType() const;
32 
36  const CscCommandDataTypeMetadata *getObjectType() const;
37 
38  CscCommandResultType getType() const;
39 
43  vector<const CscCommandDataTypeMetadata *> getAllObjectTypesMetadata() const;
44 
48  const string &getDescription() const;
49 
50  static const CscCommandResultMetadata *getForCommandId(const string &commandId);
51 };
52 
57 }
58 
59 inline map<string, const CscCommandResultMetadata *> &commandResultsMetadataById() {
60  static map<string, const CscCommandResultMetadata *> theMap;
61  return theMap;
62 }
63 
64 inline const CscCommandResultMetadata *registerCommandResultMetadata(const string &commandId, const CscCommandResultMetadata *metadata) {
65  map<string, const CscCommandResultMetadata *> &registerMap = commandResultsMetadataById();
66  unique_lock lock(commandResultsMetadataByIdMutex());
67  auto it = registerMap.find(commandId);
68  if (it != registerMap.end()) {
69  /* Note : no delete because class may have been unloaded */
70  registerMap.erase(it);
71  }
72  registerMap[commandId] = metadata;
73  return metadata;
74 }
75 
76 }
77 
78 #endif
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:31
conscience_core::bridging::commands::CscCommandDataTypeNodeMetadata
Definition: CommandParamsSpec.h:158
conscience_utils::mutexutils::shared_recursive_mutex_t::instance
static shared_recursive_mutex_t & instance()
The shared_recursive_mutex_t is relying on thread local storage, so there can only be 1 valid instanc...
Definition: shared_recursive_mutex.h:28
conscience_core::bridging::commands::CscCommandDataTypeMetadata
Definition: CommandParamsSpec.h:294
CommandExecutionResultBinary.h
CommandExecutionResultSequence.h
CommandExecutionResultString.h
conscience_core::bridging::commands::result::commandResultsMetadataByIdMutex
CommandResultsMetadataByIdMutex & commandResultsMetadataByIdMutex()
Definition: CommandResultSpec.h:55
conscience_core::bridging::commands::result
Definition: CscCommandMetadataBuilder.h:26
conscience_core::bridging::commands::result::CscCommandResultMetadata
Definition: CommandResultSpec.h:17
conscience_core::bridging::commands::result::commandResultsMetadataById
map< string, const CscCommandResultMetadata * > & commandResultsMetadataById()
Definition: CommandResultSpec.h:59
CscCommon.h
conscience_core::bridging::commands::result::registerCommandResultMetadata
const CscCommandResultMetadata * registerCommandResultMetadata(const string &commandId, const CscCommandResultMetadata *metadata)
Definition: CommandResultSpec.h:64
jwt::json::type
type
Generic JSON types used in JWTs.
Definition: jwt.h:1794
conscience_utils::mutexutils::shared_recursive_mutex_t
Implementation of a fast shared_recursive_mutex Thanks to https://github.com/KonanM/shared_recursive_...
Definition: shared_recursive_mutex.h:18
conscience_core::bridging::commands::result::CommandResultsMetadataByIdMutexUniqueType
Definition: CommandResultSpec.h:53