CatapultServer  v0.5.0.1 (Elephant)
MongoTransactionPluginFactory.h
Go to the documentation of this file.
1 
21 #pragma once
22 #include "MongoTransactionPlugin.h"
24 
25 namespace catapult { namespace mongo {
26 
29  private:
32 
33  public:
35  template<typename TEmbeddedTransaction, typename TStreamEmbeddedFunc>
36  static std::unique_ptr<EmbeddedTransactionPlugin> CreateEmbedded(TStreamEmbeddedFunc streamEmbeddedFunc) {
37  return std::make_unique<EmbeddedTransactionPluginT<TEmbeddedTransaction>>(streamEmbeddedFunc);
38  }
39 
41  template<typename TTransaction, typename TEmbeddedTransaction, typename TStreamFunc, typename TStreamEmbeddedFunc>
42  static std::unique_ptr<TransactionPlugin> Create(TStreamFunc streamFunc, TStreamEmbeddedFunc streamEmbeddedFunc) {
43  return std::make_unique<TransactionPluginT<TTransaction, TEmbeddedTransaction>>(streamFunc, streamEmbeddedFunc);
44  }
45 
46  private:
47  template<typename TTransaction, typename TDerivedTransaction, typename TPlugin>
48  class BasicTransactionPluginT : public TPlugin {
49  private:
51 
52  public:
53  explicit BasicTransactionPluginT(const StreamFunc& streamFunc) : m_streamFunc(streamFunc)
54  {}
55 
56  public:
57  model::EntityType type() const override {
58  return TDerivedTransaction::Entity_Type;
59  }
60 
61  void streamTransaction(bsoncxx::builder::stream::document& builder, const TTransaction& transaction) const override {
62  m_streamFunc(builder, static_cast<const TDerivedTransaction&>(transaction));
63  }
64 
65  private:
67  };
68 
69  template<typename TEmbeddedTransaction>
72  TEmbeddedTransaction,
74 
75  template<typename TTransaction, typename TEmbeddedTransaction>
76  class TransactionPluginT : public BasicTransactionPluginT<model::Transaction, TTransaction, TransactionPlugin> {
77  public:
78  template<typename TStreamFunc, typename TStreamEmbeddedFunc>
79  explicit TransactionPluginT(TStreamFunc streamFunc, TStreamEmbeddedFunc streamEmbeddedFunc)
80  : BasicTransactionPluginT<model::Transaction, TTransaction, TransactionPlugin>(streamFunc)
81  , m_pEmbeddedTransactionPlugin(CreateEmbedded<TEmbeddedTransaction>(streamEmbeddedFunc))
82  {}
83 
84  public:
85  std::vector<bsoncxx::document::value> extractDependentDocuments(
86  const model::Transaction&,
87  const MongoTransactionMetadata&) const override {
88  // don't support any dependent documents by default
89  return {};
90  }
91 
92  bool supportsEmbedding() const override {
93  return true;
94  }
95 
96  const EmbeddedTransactionPlugin& embeddedPlugin() const override {
98  }
99 
100  private:
101  std::unique_ptr<EmbeddedTransactionPlugin> m_pEmbeddedTransactionPlugin;
102  };
103  };
104 
106 #define DEFINE_MONGO_TRANSACTION_PLUGIN_FACTORY(NAME, STREAM) \
107  std::unique_ptr<MongoTransactionPlugin> Create##NAME##TransactionMongoPlugin() { \
108  return MongoTransactionPluginFactory::Create<model::NAME##Transaction, model::Embedded##NAME##Transaction>( \
109  STREAM<model::NAME##Transaction>, \
110  STREAM<model::Embedded##NAME##Transaction>); \
111  }
112 }}
catapult::mongo::MongoTransactionMetadata
Mongo transaction metadata.
Definition: MongoTransactionMetadata.h:31
Transaction.h
catapult::mongo::MongoTransactionPluginFactory::TransactionPluginT::m_pEmbeddedTransactionPlugin
std::unique_ptr< EmbeddedTransactionPlugin > m_pEmbeddedTransactionPlugin
Definition: MongoTransactionPluginFactory.h:101
catapult::mongo::MongoTransactionPluginFactory
Factory for creating mongo transaction plugins.
Definition: MongoTransactionPluginFactory.h:28
catapult::mongo::MongoTransactionPluginFactory::Create
static std::unique_ptr< TransactionPlugin > Create(TStreamFunc streamFunc, TStreamEmbeddedFunc streamEmbeddedFunc)
Creates a transaction plugin that supports embedding around streamFunc and streamEmbeddedFunc.
Definition: MongoTransactionPluginFactory.h:42
catapult::mongo::MongoTransactionPluginFactory::TransactionPluginT
Definition: MongoTransactionPluginFactory.h:76
catapult::mongo::MongoTransactionPluginFactory::BasicTransactionPluginT
Definition: MongoTransactionPluginFactory.h:48
catapult::mongo::MongoTransactionPluginFactory::CreateEmbedded
static std::unique_ptr< EmbeddedTransactionPlugin > CreateEmbedded(TStreamEmbeddedFunc streamEmbeddedFunc)
Creates an embedded transaction plugin around streamEmbeddedFunc.
Definition: MongoTransactionPluginFactory.h:36
catapult::model::EntityType
EntityType
Enumeration of entity types.
Definition: EntityType.h:43
MongoTransactionPlugin.h
catapult::mongo::MongoTransactionPluginFactory::BasicTransactionPluginT::streamTransaction
void streamTransaction(bsoncxx::builder::stream::document &builder, const TTransaction &transaction) const override
Definition: MongoTransactionPluginFactory.h:61
catapult::mongo::EmbeddedMongoTransactionPlugin
An embedded mongo transaction plugin.
Definition: MongoTransactionPlugin.h:52
catapult::mongo::MongoTransactionPluginFactory::BasicTransactionPluginT::type
model::EntityType type() const override
Definition: MongoTransactionPluginFactory.h:57
catapult::mongo::MongoTransactionPluginFactory::TransactionPluginT::TransactionPluginT
TransactionPluginT(TStreamFunc streamFunc, TStreamEmbeddedFunc streamEmbeddedFunc)
Definition: MongoTransactionPluginFactory.h:79
catapult::mongo::MongoTransactionPluginFactory::TransactionPluginT::extractDependentDocuments
std::vector< bsoncxx::document::value > extractDependentDocuments(const model::Transaction &, const MongoTransactionMetadata &) const override
Definition: MongoTransactionPluginFactory.h:85
catapult::mongo::MongoTransactionPluginFactory::BasicTransactionPluginT::BasicTransactionPluginT
BasicTransactionPluginT(const StreamFunc &streamFunc)
Definition: MongoTransactionPluginFactory.h:53
catapult::mongo::MongoTransactionPluginFactory::TransactionPluginT::embeddedPlugin
const EmbeddedTransactionPlugin & embeddedPlugin() const override
Gets the corresponding embedded plugin if supportsEmbedding() is true.
Definition: MongoTransactionPluginFactory.h:96
catapult::mongo::MongoTransactionPluginFactory::BasicTransactionPluginT::m_streamFunc
StreamFunc m_streamFunc
Definition: MongoTransactionPluginFactory.h:66
catapult::mongo::MongoTransactionPluginFactory::BasicTransactionPluginT< model::Transaction, TTransaction, TransactionPlugin >::StreamFunc
consumer< bsoncxx::builder::stream::document &, const TTransaction & > StreamFunc
Definition: MongoTransactionPluginFactory.h:50
catapult::model::EmbeddedTransaction
Binary layout for an embedded transaction (non-verifiable).
Definition: EmbeddedTransaction.h:38
catapult
Definition: AddressExtractionExtension.cpp:28
catapult::mongo::MongoTransactionPlugin
A mongo transaction plugin.
Definition: MongoTransactionPlugin.h:55
catapult::consumer
std::function< void(TArgs...)> consumer
A consumer function.
Definition: functions.h:35
catapult::mongo::MongoTransactionPluginFactory::TransactionPluginT::supportsEmbedding
bool supportsEmbedding() const override
true if this transaction type supports embedding.
Definition: MongoTransactionPluginFactory.h:92
catapult::model::Transaction
Binary layout for a transaction.
Definition: Transaction.h:32