CatapultServer  v0.5.0.1 (Elephant)
MongoReceiptPluginFactory.h
Go to the documentation of this file.
1 
21 #pragma once
22 #include "MongoReceiptPlugin.h"
23 #include "catapult/model/Receipt.h"
24 #include "catapult/functions.h"
25 
26 namespace catapult { namespace mongo {
27 
30  private:
32 
33  public:
35  template<typename TReceipt, typename TStreamFunc>
36  static std::unique_ptr<ReceiptPlugin> Create(model::ReceiptType type, TStreamFunc streamFunc) {
37  return std::make_unique<ReceiptPluginT<TReceipt>>(type, streamFunc);
38  }
39 
40  private:
41  template<typename TReceipt>
42  class ReceiptPluginT : public ReceiptPlugin {
43  private:
45 
46  public:
47  explicit ReceiptPluginT(model::ReceiptType type, const StreamFunc& streamFunc)
48  : m_type(type)
49  , m_streamFunc(streamFunc)
50  {}
51 
52  public:
53  model::ReceiptType type() const override {
54  return m_type;
55  }
56 
57  void streamReceipt(bsoncxx::builder::stream::document& builder, const model::Receipt& receipt) const override {
58  m_streamFunc(builder, static_cast<const TReceipt&>(receipt));
59  }
60 
61  private:
64  };
65  };
66 
68 #define DEFINE_MONGO_RECEIPT_PLUGIN_FACTORY(NAME, STREAM) \
69  std::unique_ptr<MongoReceiptPlugin> Create##NAME##ReceiptMongoPlugin(model::ReceiptType type) { \
70  return MongoReceiptPluginFactory::Create<model::NAME##Receipt>(type, STREAM); \
71  }
72 
74  std::unique_ptr<MongoReceiptPlugin> CreateBalanceTransferReceiptMongoPlugin(model::ReceiptType type);
75 
77  std::unique_ptr<MongoReceiptPlugin> CreateBalanceChangeReceiptMongoPlugin(model::ReceiptType type);
78 
80  std::unique_ptr<MongoReceiptPlugin> CreateInflationReceiptMongoPlugin(model::ReceiptType type);
81 }}
Receipt.h
MapperUtils.h
catapult::mongo::MongoReceiptPlugin
A mongo receipt plugin.
Definition: MongoReceiptPlugin.h:33
MongoReceiptPluginFactory.h
catapult::model::Receipt
Binary layout for a receipt entity.
Definition: Receipt.h:31
DEFINE_MONGO_RECEIPT_PLUGIN_FACTORY
#define DEFINE_MONGO_RECEIPT_PLUGIN_FACTORY(NAME, STREAM)
Defines a mongo receipt plugin factory for NAME receipt using STREAM.
Definition: MongoReceiptPluginFactory.h:68
functions.h
catapult::mongo::mappers::ToInt64
int64_t ToInt64(TBaseValue value)
Converts base value to int64_t.
Definition: MapperUtils.h:75
catapult::mongo::MongoReceiptPluginFactory::Create
static std::unique_ptr< ReceiptPlugin > Create(model::ReceiptType type, TStreamFunc streamFunc)
Creates a receipt plugin around type and streamFunc.
Definition: MongoReceiptPluginFactory.h:36
catapult::model::ReceiptType
ReceiptType
Enumeration of receipt types.
Definition: ReceiptType.h:58
catapult::mongo::MongoReceiptPluginFactory::ReceiptPluginT::m_streamFunc
StreamFunc m_streamFunc
Definition: MongoReceiptPluginFactory.h:63
catapult::mongo::CreateInflationReceiptMongoPlugin
std::unique_ptr< MongoReceiptPlugin > CreateInflationReceiptMongoPlugin(model::ReceiptType type)
Creates a mongo inflation receipt plugin around type.
catapult::mongo::MongoReceiptPluginFactory::ReceiptPluginT::streamReceipt
void streamReceipt(bsoncxx::builder::stream::document &builder, const model::Receipt &receipt) const override
Streams a receipt to builder.
Definition: MongoReceiptPluginFactory.h:57
catapult::mongo::CreateBalanceTransferReceiptMongoPlugin
std::unique_ptr< MongoReceiptPlugin > CreateBalanceTransferReceiptMongoPlugin(model::ReceiptType type)
Creates a mongo balance transfer receipt plugin around type.
catapult::mongo::MongoReceiptPluginFactory::ReceiptPluginT::m_type
model::ReceiptType m_type
Definition: MongoReceiptPluginFactory.h:62
ReceiptMapper.h
catapult::mongo::MongoReceiptPluginFactory::ReceiptPluginT::type
model::ReceiptType type() const override
Gets the receipt type.
Definition: MongoReceiptPluginFactory.h:53
catapult::mongo::CreateBalanceChangeReceiptMongoPlugin
std::unique_ptr< MongoReceiptPlugin > CreateBalanceChangeReceiptMongoPlugin(model::ReceiptType type)
Creates a mongo balance change receipt plugin around type.
catapult
Definition: AddressExtractionExtension.cpp:28
catapult::mongo::mappers::ToBinary
bsoncxx::types::b_binary ToBinary(const uint8_t *pData, size_t size)
Converts raw array (pData) of size elements into bson binary type.
Definition: MapperUtils.cpp:30
catapult::mongo::MongoReceiptPluginFactory::ReceiptPluginT::StreamFunc
consumer< bsoncxx::builder::stream::document &, const TReceipt & > StreamFunc
Definition: MongoReceiptPluginFactory.h:44
catapult::mongo::MongoReceiptPluginFactory::ReceiptPluginT
Definition: MongoReceiptPluginFactory.h:42
catapult::mongo::MongoReceiptPluginFactory::ReceiptPluginT::ReceiptPluginT
ReceiptPluginT(model::ReceiptType type, const StreamFunc &streamFunc)
Definition: MongoReceiptPluginFactory.h:47
MongoReceiptPlugin.h
catapult::consumer
std::function< void(TArgs...)> consumer
A consumer function.
Definition: functions.h:35
catapult::mongo::MongoReceiptPluginFactory
Factory for creating mongo receipt plugins.
Definition: MongoReceiptPluginFactory.h:29