// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_BUILDER_H_ #define MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_BUILDER_H_ #include #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" #include "mojo/public/cpp/bindings/lib/message_internal.h" namespace mojo { class Message; namespace internal { class MessageBuilder { public: MessageBuilder(uint32_t name, size_t payload_size); ~MessageBuilder(); Buffer* buffer() { return &buf_; } // Call Finish when done making allocations in |buffer()|. Upon return, // |message| will contain the message data, and |buffer()| will no longer be // valid to reference. void Finish(Message* message); protected: explicit MessageBuilder(size_t size); FixedBuffer buf_; MOJO_DISALLOW_COPY_AND_ASSIGN(MessageBuilder); }; class MessageWithRequestIDBuilder : public MessageBuilder { public: MessageWithRequestIDBuilder(uint32_t name, size_t payload_size, uint32_t flags, uint64_t request_id); }; class RequestMessageBuilder : public MessageWithRequestIDBuilder { public: RequestMessageBuilder(uint32_t name, size_t payload_size) : MessageWithRequestIDBuilder(name, payload_size, kMessageExpectsResponse, 0) {} }; class ResponseMessageBuilder : public MessageWithRequestIDBuilder { public: ResponseMessageBuilder(uint32_t name, size_t payload_size, uint64_t request_id) : MessageWithRequestIDBuilder(name, payload_size, kMessageIsResponse, request_id) {} }; } // namespace internal } // namespace mojo #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_BUILDER_H_