Index: mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl |
new file mode 100644 |
index 0000000000000000000000000000000000000000..706cdc8f72f9b740624121172fa65b856a7e1cb1 |
--- /dev/null |
+++ b/mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl |
@@ -0,0 +1,105 @@ |
+{%- for method in interface.methods %} |
+const int k{{interface.name}}_{{method.name}}_name = {{method.ordinal}}; |
+{%- endfor %} |
+ |
+ |
+abstract class {{interface.name}}Calls { |
+ List get send_queue; |
+ core.MojoHandle get handle; |
+ |
+ Future enqueueMessage(Type t, int name, Object msg); |
+ |
+{%- for method in interface.methods %} |
+ Future {{method.name|stylize_method}}( |
+{%- for parameter in method.parameters -%} |
+ {{parameter.kind|dart_decl_type}} {{parameter.name}}{% if not loop.last %}, {% endif %} |
+{%- endfor -%} |
+ ) { |
+ var params = new {{interface.name}}_{{method.name}}_Params(); |
+{%- for parameter in method.parameters %} |
+ params.{{parameter.name}} = {{parameter.name}}; |
+{%- endfor %} |
+ return enqueueMessage({{interface.name}}_{{method.name}}_Params, |
+ k{{interface.name}}_{{method.name}}_name, |
+ params); |
+ } |
+{%- endfor %} |
+} |
+ |
+ |
+class {{interface.name}}Client extends bindings.Client with {{interface.name}}Calls { |
+ {{interface.name}}Client(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
+ |
+ void handleResponse(bindings.MessageReader reader) { |
+ switch (reader.name) { |
+{%- for method in interface.methods %} |
+ case k{{interface.name}}_{{method.name}}_name: |
+{%- if method.response_parameters != None %} |
+ var r = reader.decodeStruct({{interface.name}}_{{method.name}}_ResponseParams); |
+ Completer c = completer_queue.removeAt(0); |
+ c.complete(r); |
+ break; |
+{%- endif %} |
+{%- endfor %} |
+ default: |
+ throw new Exception("Unexpected message name"); |
+ break; |
+ } |
+ } |
+} |
+ |
+ |
+abstract class {{interface.name}}Interface extends bindings.Interface { |
+ {{interface.name}}Interface(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
+ |
+{% for method in interface.methods %} |
+{%- if method.response_parameters == None %} |
+ void {{method.name|stylize_method}}({{interface.name}}_{{method.name}}_Params params); |
+{%- else %} |
+ Future<{{interface.name}}_{{method.name}}_ResponseParams> {{method.name|stylize_method}}({{interface.name}}_{{method.name}}_Params); |
+{%- endif %} |
+{%- endfor %} |
+ |
+ Future<bindings.Message> handleMessage(bindings.MessageReader reader) { |
+ var result = null; |
+ switch (reader.name) { |
+{%- for method in interface.methods %} |
+ case k{{interface.name}}_{{method.name}}_name: |
+ var params = reader.decodeStruct({{interface.name}}_{{method.name}}_Params); |
+{%- if method.response_parameters == None %} |
+ {{method.name|stylize_method}}(params); |
+{%- else %} |
+ var response_message = new Completer(); |
+ {{method.name|stylize_method}}(params).then((response) { |
+ buildResponse(response_message, |
+ {{interface.name}}_{{method.name}}_ResponseParams, |
+ k{{interface.name}}_{{method.name}}_name, |
+ response); |
+ }); |
+ result = response_message.future; |
+{%- endif %} |
+ break; |
+{%- endfor %} |
+ default: |
+ throw new Exception("Unexpected message name"); |
+ break; |
+ } |
+ return result; |
+ } |
+} |
+ |
+ |
+{#--- TODO(zra): Validation #} |
+ |
+ |
+{#--- Interface Constants #} |
+{%- for constant in interface.constants %} |
+final {{constant.name}} = {{constant.value|expression_to_text}}, |
+{%- endfor %} |
+ |
+ |
+{#--- Interface Enums #} |
+{%- from "enum_definition.tmpl" import enum_def -%} |
+{%- for enum in interface.enums %} |
+ {{ enum_def("", enum) }} |
+{%- endfor %} |