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

Side by Side Diff: mojom/generators/rust/templates/interface.tmpl.go

Issue 2240003002: Rust: Polish off communication across Mojom interfaces (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Upload newest version of code gen Created 4 years, 4 months 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 unified diff | Download patch
« no previous file with comments | « mojom/generators/rust/rustgen/source.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package templates 5 package templates
6 6
7 const GenerateEndpoint = ` 7 const GenerateEndpoint = `
8 {{- /* . (dot) refers to a string which is the endpoint's name */ -}} 8 {{- /* . (dot) refers to a string which is the endpoint's name */ -}}
9 {{- define "GenerateEndpoint" -}} 9 {{- define "GenerateEndpoint" -}}
10 {{- $endpoint := . -}} 10 {{- $endpoint := .Name -}}
11 {{- $interface := .Interface -}}
11 12
12 pub struct {{$endpoint}} { 13 pub struct {{$endpoint}} {
13 pipe: message_pipe::MessageEndpoint, 14 pipe: message_pipe::MessageEndpoint,
15 version: u32,
14 } 16 }
15 17
16 impl {{$endpoint}} { 18 impl {{$endpoint}} {
17 pub fn new(pipe: message_pipe::MessageEndpoint) -> {{$endpoint}} { 19 pub fn new(pipe: message_pipe::MessageEndpoint) -> {{$endpoint}} {
18 {{$endpoint}} { pipe: pipe } 20 {{$endpoint}} {
21 pipe: pipe,
22 version: {{$interface}}::VERSION,
23 }
19 } 24 }
25 pub fn with_version(pipe: message_pipe::MessageEndpoint, version: u32) -> {{ $endpoint}} {
26 {{$endpoint}} {
27 pipe: pipe,
28 version: version,
29 }
30 }
31 }
32
33 impl MojomInterface for {{$endpoint}} {
34 fn service_name() -> &'static str { {{$interface}}::SERVICE_NAME }
35 fn version(&self) -> u32 { self.version }
36 fn pipe(&self) -> &message_pipe::MessageEndpoint { &self.pipe }
37 fn unwrap(self) -> message_pipe::MessageEndpoint { self.pipe }
20 } 38 }
21 39
22 impl CastHandle for {{$endpoint}} { 40 impl CastHandle for {{$endpoint}} {
23 unsafe fn from_untyped(handle: system::UntypedHandle) -> {{$endpoint}} { 41 unsafe fn from_untyped(handle: system::UntypedHandle) -> {{$endpoint}} {
24 {{$endpoint}} { 42 {{$endpoint}} {
25 pipe: message_pipe::MessageEndpoint::from_untyped(handle), 43 pipe: message_pipe::MessageEndpoint::from_untyped(handle),
44 version: 0, // Since we have no other information, assume its the ba se
26 } 45 }
27 } 46 }
28 fn as_untyped(self) -> system::UntypedHandle { 47 fn as_untyped(self) -> system::UntypedHandle {
29 self.pipe.as_untyped() 48 self.pipe.as_untyped()
30 } 49 }
31 } 50 }
32 51
33 impl MojomEncodable for {{$endpoint}} { 52 impl MojomEncodable for {{$endpoint}} {
34 impl_encodable_for_interface!(); 53 impl_encodable_for_interface!();
35 } 54 }
36 55
37 {{- end -}} 56 {{- end -}}
38 ` 57 `
39 58
40 const GenerateInterface = ` 59 const GenerateInterface = `
41 {{- /* . (dot) refers to the Go type |rustgen.InterfaceTemplate| */ -}} 60 {{- /* . (dot) refers to the Go type |rustgen.InterfaceTemplate| */ -}}
42 {{- define "GenerateInterface" -}} 61 {{- define "GenerateInterface" -}}
43 {{- $interface := . -}} 62 {{- $interface := . -}}
44 // --- {{$interface.Name}} --- 63 // --- {{$interface.Name}} ---
45 64
46 pub mod {{$interface.Name}} { 65 pub mod {{$interface.Name}} {
47 pub const SERVICE_NAME: &'static str = "{{$interface.ServiceName}}"; 66 pub const SERVICE_NAME: &'static str = "{{$interface.ServiceName}}";
48 pub const VERSION: u32 = {{$interface.Version}}; 67 pub const VERSION: u32 = {{$interface.Version}};
49 } 68 }
50 69
51 {{$client := printf "%s%s" $interface.Name "Client" -}} 70 {{$client := $interface.Client -}}
52 {{template "GenerateEndpoint" $client}} 71 {{template "GenerateEndpoint" $client}}
53 72
54 impl MojomInterface for {{$client}} { 73 impl<R: {{$interface.Name}}Request> MojomInterfaceSend<R> for {{$client.Name}} { }
55 fn service_name() -> &'static str { {{$interface.Name}}::SERVICE_NAME } 74 impl MojomInterfaceRecv for {{$client.Name}} {
56 fn version() -> u32 { {{$interface.Name}}::VERSION }
57 fn pipe(&self) -> &message_pipe::MessageEndpoint { &self.pipe }
58 fn unwrap(self) -> message_pipe::MessageEndpoint { self.pipe }
59 }
60
61 impl<R: {{$interface.Name}}Request> MojomInterfaceSend<R> for {{$client}} {}
62 impl MojomInterfaceRecv for {{$client}} {
63 type Container = {{$interface.Name}}ResponseOption; 75 type Container = {{$interface.Name}}ResponseOption;
64 } 76 }
65 77
66 {{$server := printf "%s%s" $interface.Name "Server" -}} 78 {{$server := $interface.Server -}}
67 {{template "GenerateEndpoint" $server}} 79 {{template "GenerateEndpoint" $server}}
68 80
69 impl MojomInterface for {{$server}} { 81 impl<R: {{$interface.Name}}Response> MojomInterfaceSend<R> for {{$server.Name}} {}
70 fn service_name() -> &'static str { {{$interface.Name}}::SERVICE_NAME } 82 impl MojomInterfaceRecv for {{$server.Name}} {
71 fn version() -> u32 { {{$interface.Name}}::VERSION }
72 fn pipe(&self) -> &message_pipe::MessageEndpoint { &self.pipe }
73 fn unwrap(self) -> message_pipe::MessageEndpoint { self.pipe }
74 }
75
76 impl<R: {{$interface.Name}}Response> MojomInterfaceSend<R> for {{$server}} {}
77 impl MojomInterfaceRecv for {{$server}} {
78 type Container = {{$interface.Name}}RequestOption; 83 type Container = {{$interface.Name}}RequestOption;
79 } 84 }
80 85
81 // Enums 86 // Enums
82 {{range $enum := $interface.Enums -}} 87 {{range $enum := $interface.Enums -}}
83 {{template "GenerateEnum" $enum}} 88 {{template "GenerateEnum" $enum}}
84 {{end}} 89 {{end}}
85 90
86 // Constants 91 // Constants
87 {{range $const := $interface.Constants -}} 92 {{range $const := $interface.Constants -}}
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 } 152 }
148 153
149 {{range $message := $interface.Messages -}} 154 {{range $message := $interface.Messages -}}
150 /// Message: {{$message.Name}} 155 /// Message: {{$message.Name}}
151 pub mod {{$message.Name}} { 156 pub mod {{$message.Name}} {
152 pub const ORDINAL: u32 = {{$message.MessageOrdinal}}; 157 pub const ORDINAL: u32 = {{$message.MessageOrdinal}};
153 pub const MIN_VERSION: u32 = {{$message.MinVersion}}; 158 pub const MIN_VERSION: u32 = {{$message.MinVersion}};
154 } 159 }
155 {{template "GenerateStruct" $message.RequestStruct}} 160 {{template "GenerateStruct" $message.RequestStruct}}
156 impl MojomMessage for {{$message.RequestStruct.Name}} { 161 impl MojomMessage for {{$message.RequestStruct.Name}} {
162 fn min_version() -> u32 { {{$message.Name}}::MIN_VERSION }
157 fn create_header() -> MessageHeader { 163 fn create_header() -> MessageHeader {
158 MessageHeader::new({{$interface.Name}}::VERSION, 164 MessageHeader::new(
165 {{- if eq $message.ResponseStruct.Name "" -}}
166 0,
159 {{$message.Name}}::ORDINAL, 167 {{$message.Name}}::ORDINAL,
160 {{- if eq $message.ResponseStruct.Name "" -}}
161 message::MESSAGE_HEADER_NO_FLAG) 168 message::MESSAGE_HEADER_NO_FLAG)
162 {{else}} 169 {{else}}
170 1,
171 {{$message.Name}}::ORDINAL,
163 message::MESSAGE_HEADER_EXPECT_RESPONSE) 172 message::MESSAGE_HEADER_EXPECT_RESPONSE)
164 {{end}} 173 {{end}}
165 } 174 }
166 } 175 }
167 impl {{$interface.Name}}Request for {{$message.RequestStruct.Name}} {} 176 impl {{$interface.Name}}Request for {{$message.RequestStruct.Name}} {}
168 177
169 {{if ne $message.ResponseStruct.Name "" -}} 178 {{if ne $message.ResponseStruct.Name "" -}}
170 {{template "GenerateStruct" $message.ResponseStruct}} 179 {{template "GenerateStruct" $message.ResponseStruct}}
171 180
172 impl MojomMessage for {{$message.ResponseStruct.Name}} { 181 impl MojomMessage for {{$message.ResponseStruct.Name}} {
182 fn min_version() -> u32 { {{$message.Name}}::MIN_VERSION }
173 fn create_header() -> MessageHeader { 183 fn create_header() -> MessageHeader {
174 MessageHeader::new({{$interface.Name}}::VERSION, 184 MessageHeader::new(1,
175 {{$message.Name}}::ORDINAL, 185 {{$message.Name}}::ORDINAL,
176 message::MESSAGE_HEADER_IS_RESPONSE) 186 message::MESSAGE_HEADER_IS_RESPONSE)
177 } 187 }
178 } 188 }
179 impl {{$interface.Name}}Response for {{$message.RequestStruct.Name}} {} 189 impl {{$interface.Name}}Response for {{$message.ResponseStruct.Name}} {}
180 190
181 {{- end}} 191 {{- end}}
182 {{- end -}} 192 {{- end -}}
183 {{- end -}} 193 {{- end -}}
184 ` 194 `
OLDNEW
« no previous file with comments | « mojom/generators/rust/rustgen/source.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698