diff options
Diffstat (limited to 'src/mongo/rpc/request_builder_interface.h')
-rw-r--r-- | src/mongo/rpc/request_builder_interface.h | 155 |
1 files changed, 74 insertions, 81 deletions
diff --git a/src/mongo/rpc/request_builder_interface.h b/src/mongo/rpc/request_builder_interface.h index 7297bf393c5..f27c7e3e10d 100644 --- a/src/mongo/rpc/request_builder_interface.h +++ b/src/mongo/rpc/request_builder_interface.h @@ -34,92 +34,85 @@ #include "mongo/rpc/protocol.h" namespace mongo { - class Message; - class BSONObj; - class StringData; +class Message; +class BSONObj; +class StringData; namespace rpc { - class DocumentRange; +class DocumentRange; + +/** + * Constructs an RPC request. + */ +class RequestBuilderInterface { + MONGO_DISALLOW_COPYING(RequestBuilderInterface); + +public: + /** + * Request builders must have their fields set in order as they are immediately written into + * the underlying message buffer. This enum represents the next field that can be written + * into the builder. Note that when the builder is in state 'kInputDocs', multiple input + * docs can be added. After the builder's done() method is called it is in state 'kDone', + * and no further methods can be called. + */ + enum class State { kDatabase, kCommandName, kMetadata, kCommandArgs, kInputDocs, kDone }; + + virtual ~RequestBuilderInterface() = default; + + /** + * Sets the database that the command will be executed against. + */ + virtual RequestBuilderInterface& setDatabase(StringData database) = 0; + + /** + * Sets the name of the command to execute. + */ + virtual RequestBuilderInterface& setCommandName(StringData commandName) = 0; + + /** + * Sets the metadata associated with this command request - see metadata.h for details. + */ + virtual RequestBuilderInterface& setMetadata(BSONObj metadata) = 0; /** - * Constructs an RPC request. + * Sets the arguments to pass to the command. */ - class RequestBuilderInterface { - MONGO_DISALLOW_COPYING(RequestBuilderInterface); - public: - - /** - * Request builders must have their fields set in order as they are immediately written into - * the underlying message buffer. This enum represents the next field that can be written - * into the builder. Note that when the builder is in state 'kInputDocs', multiple input - * docs can be added. After the builder's done() method is called it is in state 'kDone', - * and no further methods can be called. - */ - enum class State { - kDatabase, - kCommandName, - kMetadata, - kCommandArgs, - kInputDocs, - kDone - }; - - virtual ~RequestBuilderInterface() = default; - - /** - * Sets the database that the command will be executed against. - */ - virtual RequestBuilderInterface& setDatabase(StringData database) = 0; - - /** - * Sets the name of the command to execute. - */ - virtual RequestBuilderInterface& setCommandName(StringData commandName) = 0; - - /** - * Sets the metadata associated with this command request - see metadata.h for details. - */ - virtual RequestBuilderInterface& setMetadata(BSONObj metadata) = 0; - - /** - * Sets the arguments to pass to the command. - */ - virtual RequestBuilderInterface& setCommandArgs(BSONObj commandArgs) = 0; - - /** - * Add a range of input documents to the request. This method can be called multiple times - * before calling done(). - */ - virtual RequestBuilderInterface& addInputDocs(DocumentRange inputDocs) = 0; - - /** - * Add a single output document to the request. This method can be called multiple times - * before calling done(). - */ - virtual RequestBuilderInterface& addInputDoc(BSONObj inputDoc) = 0; - - /** - * Get the state of the builder. This method is intended to enable debug or invariant - * checks that the builder is in the correct state. - */ - virtual State getState() const = 0; - - /** - * Gets the protocol used to serialize this request. This should only be used for asserts, - * and not for runtime behavior changes, which should be handled with polymorphism. - */ - virtual Protocol getProtocol() const = 0; - - /** - * Writes data then transfers ownership of the message to the caller. - * The behavior of calling any methods on the object is subsequently - * undefined. - */ - virtual std::unique_ptr<Message> done() = 0; - - protected: - RequestBuilderInterface() = default; - }; + virtual RequestBuilderInterface& setCommandArgs(BSONObj commandArgs) = 0; + + /** + * Add a range of input documents to the request. This method can be called multiple times + * before calling done(). + */ + virtual RequestBuilderInterface& addInputDocs(DocumentRange inputDocs) = 0; + + /** + * Add a single output document to the request. This method can be called multiple times + * before calling done(). + */ + virtual RequestBuilderInterface& addInputDoc(BSONObj inputDoc) = 0; + + /** + * Get the state of the builder. This method is intended to enable debug or invariant + * checks that the builder is in the correct state. + */ + virtual State getState() const = 0; + + /** + * Gets the protocol used to serialize this request. This should only be used for asserts, + * and not for runtime behavior changes, which should be handled with polymorphism. + */ + virtual Protocol getProtocol() const = 0; + + /** + * Writes data then transfers ownership of the message to the caller. + * The behavior of calling any methods on the object is subsequently + * undefined. + */ + virtual std::unique_ptr<Message> done() = 0; + +protected: + RequestBuilderInterface() = default; +}; } // namespace rpc } // namespace mongo |