OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 library authentication_impl_db_mojom; |
| 6 |
| 7 import 'package:mojo/bindings.dart' as bindings; |
| 8 |
| 9 class Db extends bindings.Struct { |
| 10 static const List<bindings.StructDataHeader> kVersions = const [ |
| 11 const bindings.StructDataHeader(24, 0) |
| 12 ]; |
| 13 int version = 0; |
| 14 Map<String, String> lastSelectedAccounts = null; |
| 15 |
| 16 Db() : super(kVersions.last.size); |
| 17 |
| 18 static Db deserialize(bindings.Message message) { |
| 19 var decoder = new bindings.Decoder(message); |
| 20 var result = decode(decoder); |
| 21 if (decoder.excessHandles != null) { |
| 22 decoder.excessHandles.forEach((h) => h.close()); |
| 23 } |
| 24 return result; |
| 25 } |
| 26 |
| 27 static Db decode(bindings.Decoder decoder0) { |
| 28 if (decoder0 == null) { |
| 29 return null; |
| 30 } |
| 31 Db result = new Db(); |
| 32 |
| 33 var mainDataHeader = decoder0.decodeStructDataHeader(); |
| 34 if (mainDataHeader.version <= kVersions.last.version) { |
| 35 // Scan in reverse order to optimize for more recent versions. |
| 36 for (int i = kVersions.length - 1; i >= 0; --i) { |
| 37 if (mainDataHeader.version >= kVersions[i].version) { |
| 38 if (mainDataHeader.size == kVersions[i].size) { |
| 39 // Found a match. |
| 40 break; |
| 41 } |
| 42 throw new bindings.MojoCodecError( |
| 43 'Header size doesn\'t correspond to known version size.'); |
| 44 } |
| 45 } |
| 46 } else if (mainDataHeader.size < kVersions.last.size) { |
| 47 throw new bindings.MojoCodecError( |
| 48 'Message newer than the last known version cannot be shorter than ' |
| 49 'required by the last known version.'); |
| 50 } |
| 51 if (mainDataHeader.version >= 0) { |
| 52 result.version = decoder0.decodeUint32(8); |
| 53 } |
| 54 if (mainDataHeader.version >= 0) { |
| 55 var decoder1 = decoder0.decodePointer(16, false); |
| 56 { |
| 57 decoder1.decodeDataHeaderForMap(); |
| 58 List<String> keys0; |
| 59 List<String> values0; |
| 60 { |
| 61 var decoder2 = decoder1.decodePointer( |
| 62 bindings.ArrayDataHeader.kHeaderSize, false); |
| 63 { |
| 64 var si2 = decoder2.decodeDataHeaderForPointerArray( |
| 65 bindings.kUnspecifiedArrayLength); |
| 66 keys0 = new List<String>(si2.numElements); |
| 67 for (int i2 = 0; i2 < si2.numElements; ++i2) { |
| 68 keys0[i2] = decoder2.decodeString( |
| 69 bindings.ArrayDataHeader.kHeaderSize + |
| 70 bindings.kPointerSize * i2, |
| 71 false); |
| 72 } |
| 73 } |
| 74 } |
| 75 { |
| 76 var decoder2 = decoder1.decodePointer( |
| 77 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, |
| 78 false); |
| 79 { |
| 80 var si2 = decoder2.decodeDataHeaderForPointerArray(keys0.length); |
| 81 values0 = new List<String>(si2.numElements); |
| 82 for (int i2 = 0; i2 < si2.numElements; ++i2) { |
| 83 values0[i2] = decoder2.decodeString( |
| 84 bindings.ArrayDataHeader.kHeaderSize + |
| 85 bindings.kPointerSize * i2, |
| 86 false); |
| 87 } |
| 88 } |
| 89 } |
| 90 result.lastSelectedAccounts = |
| 91 new Map<String, String>.fromIterables(keys0, values0); |
| 92 } |
| 93 } |
| 94 return result; |
| 95 } |
| 96 |
| 97 void encode(bindings.Encoder encoder) { |
| 98 var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last); |
| 99 try { |
| 100 encoder0.encodeUint32(version, 8); |
| 101 } on bindings.MojoCodecError catch (e) { |
| 102 e.message = "Error encountered while encoding field " |
| 103 "version of struct Db: $e"; |
| 104 rethrow; |
| 105 } |
| 106 try { |
| 107 if (lastSelectedAccounts == null) { |
| 108 encoder0.encodeNullPointer(16, false); |
| 109 } else { |
| 110 var encoder1 = encoder0.encoderForMap(16); |
| 111 var keys0 = lastSelectedAccounts.keys.toList(); |
| 112 var values0 = lastSelectedAccounts.values.toList(); |
| 113 |
| 114 { |
| 115 var encoder2 = encoder1.encodePointerArray( |
| 116 keys0.length, |
| 117 bindings.ArrayDataHeader.kHeaderSize, |
| 118 bindings.kUnspecifiedArrayLength); |
| 119 for (int i1 = 0; i1 < keys0.length; ++i1) { |
| 120 encoder2.encodeString( |
| 121 keys0[i1], |
| 122 bindings.ArrayDataHeader.kHeaderSize + |
| 123 bindings.kPointerSize * i1, |
| 124 false); |
| 125 } |
| 126 } |
| 127 |
| 128 { |
| 129 var encoder2 = encoder1.encodePointerArray( |
| 130 values0.length, |
| 131 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, |
| 132 bindings.kUnspecifiedArrayLength); |
| 133 for (int i1 = 0; i1 < values0.length; ++i1) { |
| 134 encoder2.encodeString( |
| 135 values0[i1], |
| 136 bindings.ArrayDataHeader.kHeaderSize + |
| 137 bindings.kPointerSize * i1, |
| 138 false); |
| 139 } |
| 140 } |
| 141 } |
| 142 } on bindings.MojoCodecError catch (e) { |
| 143 e.message = "Error encountered while encoding field " |
| 144 "lastSelectedAccounts of struct Db: $e"; |
| 145 rethrow; |
| 146 } |
| 147 } |
| 148 |
| 149 String toString() { |
| 150 return "Db(" |
| 151 "version: $version" |
| 152 ", " |
| 153 "lastSelectedAccounts: $lastSelectedAccounts" |
| 154 ")"; |
| 155 } |
| 156 |
| 157 Map toJson() { |
| 158 Map map = new Map(); |
| 159 map["version"] = version; |
| 160 map["lastSelectedAccounts"] = lastSelectedAccounts; |
| 161 return map; |
| 162 } |
| 163 } |
OLD | NEW |