*/
class MessageFactoryFunction: public CppFunction {
public:
+ enum SerializationType {
+ kJson,
+ kDbus
+ };
+
// Methods
// Creates function code generation object that produces
// declaration and definition of a factory for messages of type
// |factory_type| that belong to given |interface|
MessageFactoryFunction(const Interface* interface,
+ SerializationType serialization_type,
FunctionMessage::MessageType factory_type);
private:
// Types
CppFile& factories_header = module_manager_->HeaderForInterface();
CppFile& factories_source = module_manager_->SourceForInterface();
+ MessageFactoryFunction::SerializationType ser_types[2];
+ size_t ser_types_count = 0;
if (preferences_->generate_json) {
+ ser_types[ser_types_count++] = MessageFactoryFunction::kJson;
+ }
+ if (preferences_->generate_dbus) {
+ ser_types[ser_types_count++] = MessageFactoryFunction::kDbus;
+ }
+
+ for (size_t i = 0; i < ser_types_count; ++i) {
MessageFactoryFunction request_factory(interface_,
+ ser_types[i],
FunctionMessage::kRequest);
request_factory.Declare(&factories_header.requests_ns().os(), true);
request_factory.Define(&factories_source.requests_ns().os(), true);
MessageFactoryFunction response_factory(interface_,
+ ser_types[i],
FunctionMessage::kResponse);
response_factory.Declare(&factories_header.responses_ns().os(), true);
response_factory.Define(&factories_source.responses_ns().os(), true);
MessageFactoryFunction notification_factory(
interface_,
+ ser_types[i],
FunctionMessage::kNotification);
notification_factory.Declare(&factories_header.notifications_ns().os(),
true);
MessageFactoryFunction::MessageFactoryFunction(
const Interface* interface,
+ SerializationType serialization_type,
FunctionMessage::MessageType factory_type)
: CppFunction("",
- "NewFromJson",
+ serialization_type == kJson ? "NewFromJson" : "NewFromDbus",
Capitalize(
FunctionMessage::MessageTypeToString(
factory_type)) + "*"),
interface_(interface),
factory_type_(factory_type) {
- Add(MessageFactoryFunction::Parameter("json", "const Json::Value&"));
+ Add(MessageFactoryFunction::Parameter(
+ serialization_type == kJson ? "json" : "reader",
+ serialization_type == kJson ? "const Json::Value&": "dbus::MessageReader*"));
Add(MessageFactoryFunction::Parameter("function_id", "FunctionID"));
}
for (MessageList::const_iterator i = functions.begin(),
end = functions.end(); i != end; ++i) {
const FunctionMessage* message = *i;
- strmfmt(*os, "case {0}: return new {1}(json);\n",
+ strmfmt(*os, "case {0}: return new {1}({2});\n",
LiteralGenerator(*message->id()).result(),
- message->name());
+ message->name(),
+ parameters_[0].name);
}
*os << "default: return NULL;\n";
}