OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 serialization | 5 package serialization |
6 | 6 |
7 import ( | 7 import ( |
| 8 "bytes" |
| 9 "compress/gzip" |
| 10 "encoding/base64" |
8 "fmt" | 11 "fmt" |
9 "mojo/public/go/bindings" | 12 "mojo/public/go/bindings" |
10 "mojom/mojom_parser/generated/mojom_files" | 13 "mojom/mojom_parser/generated/mojom_files" |
11 "mojom/mojom_parser/generated/mojom_types" | 14 "mojom/mojom_parser/generated/mojom_types" |
12 "mojom/mojom_parser/mojom" | 15 "mojom/mojom_parser/mojom" |
13 myfmt "third_party/golang/src/fmt" | 16 myfmt "third_party/golang/src/fmt" |
14 ) | 17 ) |
15 | 18 |
16 ////////////////////////////////////////////////// | 19 ////////////////////////////////////////////////// |
17 /// Mojom Descriptor Serialization | 20 /// Mojom Descriptor Serialization |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 | 206 |
204 // TODO(rudominer) Do we need the EmbeddedEnums and EmbeddedConstants | 207 // TODO(rudominer) Do we need the EmbeddedEnums and EmbeddedConstants |
205 // fields in KeysByType. It seems these fields are not currently being | 208 // fields in KeysByType. It seems these fields are not currently being |
206 // used in mojom_translator.py. | 209 // used in mojom_translator.py. |
207 | 210 |
208 // SerializedRuntimeTypeInfo | 211 // SerializedRuntimeTypeInfo |
209 if emitSerializedRuntimeTypeInfo { | 212 if emitSerializedRuntimeTypeInfo { |
210 encoder := bindings.NewEncoder() | 213 encoder := bindings.NewEncoder() |
211 encoder.SetDeterministic(true) | 214 encoder.SetDeterministic(true) |
212 typeInfo.Encode(encoder) | 215 typeInfo.Encode(encoder) |
213 » » bytes, _, err := encoder.Data() | 216 » » byteSlice, _, err := encoder.Data() |
214 if err != nil { | 217 if err != nil { |
215 panic(fmt.Sprintf("Error while serializing runtimeTypeIn
fo: %s", err.Error())) | 218 panic(fmt.Sprintf("Error while serializing runtimeTypeIn
fo: %s", err.Error())) |
216 } | 219 } |
217 » » file.SerializedRuntimeTypeInfo = &bytes | 220 » » var compressedBytes bytes.Buffer |
| 221 » » gzipWriter, _ := gzip.NewWriterLevel(&compressedBytes, gzip.Best
Compression) |
| 222 » » _, err = gzipWriter.Write(byteSlice) |
| 223 » » if err != nil { |
| 224 » » » panic(fmt.Sprintf("Error while gzipping runtimeTypeInfo:
%s", err.Error())) |
| 225 » » } |
| 226 » » err = gzipWriter.Close() |
| 227 » » if err != nil { |
| 228 » » » panic(fmt.Sprintf("Error while gzipping runtimeTypeInfo:
%s", err.Error())) |
| 229 » » } |
| 230 » » byteSlice = compressedBytes.Bytes() |
| 231 » » encoded := base64.StdEncoding.EncodeToString(byteSlice) |
| 232 » » file.SerializedRuntimeTypeInfo = &encoded |
218 } | 233 } |
219 | 234 |
220 return | 235 return |
221 } | 236 } |
222 | 237 |
223 // addServiceTypeInfo will add a ServiceTypeInfo to the ServicesByName field of
|typeInfo| corresponding | 238 // addServiceTypeInfo will add a ServiceTypeInfo to the ServicesByName field of
|typeInfo| corresponding |
224 // to |intrfc| if |intrfc| is a top-level interface, meaning that it has a non-n
il service name. In that | 239 // to |intrfc| if |intrfc| is a top-level interface, meaning that it has a non-n
il service name. In that |
225 // case this method returns true. Otherwise this method will do nothing and retu
rn fals. | 240 // case this method returns true. Otherwise this method will do nothing and retu
rn fals. |
226 func addServiceTypeInfo(intrfc *mojom.MojomInterface, typeInfo *mojom_types.Runt
imeTypeInfo) (isTopLevel bool) { | 241 func addServiceTypeInfo(intrfc *mojom.MojomInterface, typeInfo *mojom_types.Runt
imeTypeInfo) (isTopLevel bool) { |
227 isTopLevel = intrfc.ServiceName != nil | 242 isTopLevel = intrfc.ServiceName != nil |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
673 | 688 |
674 // stringPointer is a convenience function for creating a pointer to a string wh
ose value | 689 // stringPointer is a convenience function for creating a pointer to a string wh
ose value |
675 // is the specified string. It may be used in situations where the compiler will | 690 // is the specified string. It may be used in situations where the compiler will |
676 // not allow you to take the address of a string value directly, such as the | 691 // not allow you to take the address of a string value directly, such as the |
677 // return value of a function. It is necessary to create pointers to strings bec
ause | 692 // return value of a function. It is necessary to create pointers to strings bec
ause |
678 // that is how the Mojom type |string?| (i.e. nullable string) is represented in | 693 // that is how the Mojom type |string?| (i.e. nullable string) is represented in |
679 // in the Mojom Go bindings. | 694 // in the Mojom Go bindings. |
680 func stringPointer(s string) *string { | 695 func stringPointer(s string) *string { |
681 return &s | 696 return &s |
682 } | 697 } |
OLD | NEW |