Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1514)

Unified Diff: mojo/public/tools/bindings/generators/dart_templates/interface_definition.tmpl

Issue 674383002: Initial work on Dart bindings for Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Merge. Work on templates. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 %}

Powered by Google App Engine
This is Rietveld 408576698