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

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

Issue 2222823002: Rust: Add validation support to code generator (Closed) Base URL: git@github.com:domokit/mojo.git@decoding-test
Patch Set: Double check before land 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
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 := . -}}
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 93
94 {{- $req_option := printf "%s%s" $interface.Name "RequestOption" }} 94 {{- $req_option := printf "%s%s" $interface.Name "RequestOption" }}
95 {{- $rsp_option := printf "%s%s" $interface.Name "ResponseOption" }} 95 {{- $rsp_option := printf "%s%s" $interface.Name "ResponseOption" }}
96 96
97 pub enum {{$req_option}} { 97 pub enum {{$req_option}} {
98 {{range $message := $interface.Messages}} {{$message.Name}}({{$message.Reques tStruct.Name}}), 98 {{range $message := $interface.Messages}} {{$message.Name}}({{$message.Reques tStruct.Name}}),
99 {{end}} 99 {{end}}
100 } 100 }
101 101
102 impl MojomMessageOption for {{$req_option}} { 102 impl MojomMessageOption for {{$req_option}} {
103 fn decode_payload(ordinal: u32, buffer: &[u8], handles: Vec<UntypedHandle>) -> Self { 103 fn decode_payload(header: MessageHeader, buffer: &[u8], handles: Vec<Untyped Handle>) -> Result<Self, ValidationError> {
104 match ordinal { 104 match header.name {
105 {{range $message := $interface.Messages}} {{$message.Name}}::ORDINAL => {{$req_option}}::{{$message.Name}}({{$message.RequestStruct.Name}}::deserial ize(buffer, handles)), 105 {{range $message := $interface.Messages}} {{$message.Name}}::ORDINAL => {
106 {{end}} _ => panic!("Unknown message found: {}", ordinal), 106 if header.flags != {{- if eq $message.ResponseStruct.Name "" -}}
107 } 107 » » message::MESSAGE_HEADER_NO_FLAG
108 » » » {{- else -}}
109 message::MESSAGE_HEADER_EXPECT_RESPONSE
110 » » » {{- end -}} {
111 return Err(ValidationError::MessageHeaderInvalidFlags);
112 }
113 match {{$message.RequestStruct.Name}}::deserialize(buffer, handl es) {
114 Ok(value) => Ok({{$req_option}}::{{$message.Name}}(value)),
115 Err(err) => return Err(err),
116 }
117 },
118 {{end}} _ => Err(ValidationError::MessageHeaderUnknownMethod),
119 }
108 } 120 }
109 } 121 }
110 122
111 pub enum {{$rsp_option}} { 123 pub enum {{$rsp_option}} {
112 {{range $message := $interface.Messages}} 124 {{range $message := $interface.Messages}}
113 {{- if ne $message.ResponseStruct.Name ""}} {{$message.Name}}({{$message.Resp onseStruct.Name}}), 125 {{- if ne $message.ResponseStruct.Name ""}} {{$message.Name}}({{$message.Resp onseStruct.Name}}),
114 {{end -}} 126 {{end -}}
115 {{end}} 127 {{end}}
116 } 128 }
117 129
118 impl MojomMessageOption for {{$rsp_option}} { 130 impl MojomMessageOption for {{$rsp_option}} {
119 fn decode_payload(ordinal: u32, buffer: &[u8], handles: Vec<UntypedHandle>) -> Self { 131 fn decode_payload(header: MessageHeader, buffer: &[u8], handles: Vec<Untyped Handle>) -> Result<Self, ValidationError> {
120 match ordinal { 132 if header.flags != message::MESSAGE_HEADER_IS_RESPONSE {
133 return Err(ValidationError::MessageHeaderInvalidFlags);
134 }
135 match header.name {
121 {{range $message := $interface.Messages}} 136 {{range $message := $interface.Messages}}
122 {{- if ne $message.ResponseStruct.Name ""}} {{$message.Name}}::ORDIN AL => {{$rsp_option}}::{{$message.Name}}({{$message.ResponseStruct.Name}}::deser ialize(buffer, handles)), 137 {{- if ne $message.ResponseStruct.Name ""}} {{$message.Name}}::ORDIN AL => {
138 match {{$message.ResponseStruct.Name}}::deserialize(buffer, hand les) {
139 Ok(value) => Ok({{$rsp_option}}::{{$message.Name}}(value)),
140 Err(err) => return Err(err),
141 }
142 },
123 {{end -}} 143 {{end -}}
124 {{end}} _ => panic!("Unknown message found, or message has no respon se: {}", ordinal), 144 {{end}} _ => Err(ValidationError::MessageHeaderUnknownMethod),
125 } 145 }
126 } 146 }
127 } 147 }
128 148
129 {{range $message := $interface.Messages -}} 149 {{range $message := $interface.Messages -}}
130 /// Message: {{$message.Name}} 150 /// Message: {{$message.Name}}
131 pub mod {{$message.Name}} { 151 pub mod {{$message.Name}} {
132 pub const ORDINAL: u32 = {{$message.MessageOrdinal}}; 152 pub const ORDINAL: u32 = {{$message.MessageOrdinal}};
133 pub const MIN_VERSION: u32 = {{$message.MinVersion}}; 153 pub const MIN_VERSION: u32 = {{$message.MinVersion}};
134 } 154 }
135 {{template "GenerateStruct" $message.RequestStruct}} 155 {{template "GenerateStruct" $message.RequestStruct}}
(...skipping 19 matching lines...) Expand all
155 {{$message.Name}}::ORDINAL, 175 {{$message.Name}}::ORDINAL,
156 message::MESSAGE_HEADER_IS_RESPONSE) 176 message::MESSAGE_HEADER_IS_RESPONSE)
157 } 177 }
158 } 178 }
159 impl {{$interface.Name}}Response for {{$message.RequestStruct.Name}} {} 179 impl {{$interface.Name}}Response for {{$message.RequestStruct.Name}} {}
160 180
161 {{- end}} 181 {{- end}}
162 {{- end -}} 182 {{- end -}}
163 {{- end -}} 183 {{- end -}}
164 ` 184 `
OLDNEW
« no previous file with comments | « mojom/generators/rust/rustgen/type_translation.go ('k') | mojom/generators/rust/templates/source.tmpl.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698