blob: 030fa1e86e74be722317b95fdd33b3effbbc607e [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library http_response_mojom;
import 'package:mojo/bindings.dart' as bindings;
import 'package:mojo/core.dart' as core;
class HttpResponse extends bindings.Struct {
static const List<bindings.StructDataHeader> kVersions = const [
const bindings.StructDataHeader(40, 0)
];
int statusCode = 200;
core.MojoDataPipeConsumer body = null;
int contentLength = 0;
String contentType = "text/html; charset=utf-8";
Map<String, String> customHeaders = null;
HttpResponse() : super(kVersions.last.size);
static HttpResponse deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
if (decoder.excessHandles != null) {
decoder.excessHandles.forEach((h) => h.close());
}
return result;
}
static HttpResponse decode(bindings.Decoder decoder0) {
if (decoder0 == null) {
return null;
}
HttpResponse result = new HttpResponse();
var mainDataHeader = decoder0.decodeStructDataHeader();
if (mainDataHeader.version <= kVersions.last.version) {
// Scan in reverse order to optimize for more recent versions.
for (int i = kVersions.length - 1; i >= 0; --i) {
if (mainDataHeader.version >= kVersions[i].version) {
if (mainDataHeader.size == kVersions[i].size) {
// Found a match.
break;
}
throw new bindings.MojoCodecError(
'Header size doesn\'t correspond to known version size.');
}
}
} else if (mainDataHeader.size < kVersions.last.size) {
throw new bindings.MojoCodecError(
'Message newer than the last known version cannot be shorter than '
'required by the last known version.');
}
if (mainDataHeader.version >= 0) {
result.statusCode = decoder0.decodeUint32(8);
}
if (mainDataHeader.version >= 0) {
result.body = decoder0.decodeConsumerHandle(12, true);
}
if (mainDataHeader.version >= 0) {
result.contentLength = decoder0.decodeInt64(16);
}
if (mainDataHeader.version >= 0) {
result.contentType = decoder0.decodeString(24, false);
}
if (mainDataHeader.version >= 0) {
var decoder1 = decoder0.decodePointer(32, true);
if (decoder1 == null) {
result.customHeaders = null;
} else {
decoder1.decodeDataHeaderForMap();
List<String> keys0;
List<String> values0;
{
var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize, false);
{
var si2 = decoder2.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
keys0 = new List<String>(si2.numElements);
for (int i2 = 0; i2 < si2.numElements; ++i2) {
keys0[i2] = decoder2.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
}
}
}
{
var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, false);
{
var si2 = decoder2.decodeDataHeaderForPointerArray(keys0.length);
values0 = new List<String>(si2.numElements);
for (int i2 = 0; i2 < si2.numElements; ++i2) {
values0[i2] = decoder2.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
}
}
}
result.customHeaders = new Map<String, String>.fromIterables(
keys0, values0);
}
}
return result;
}
void encode(bindings.Encoder encoder) {
var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
try {
encoder0.encodeUint32(statusCode, 8);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
"statusCode of struct HttpResponse: $e";
rethrow;
}
try {
encoder0.encodeConsumerHandle(body, 12, true);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
"body of struct HttpResponse: $e";
rethrow;
}
try {
encoder0.encodeInt64(contentLength, 16);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
"contentLength of struct HttpResponse: $e";
rethrow;
}
try {
encoder0.encodeString(contentType, 24, false);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
"contentType of struct HttpResponse: $e";
rethrow;
}
try {
if (customHeaders == null) {
encoder0.encodeNullPointer(32, true);
} else {
var encoder1 = encoder0.encoderForMap(32);
var keys0 = customHeaders.keys.toList();
var values0 = customHeaders.values.toList();
{
var encoder2 = encoder1.encodePointerArray(keys0.length, bindings.ArrayDataHeader.kHeaderSize, bindings.kUnspecifiedArrayLength);
for (int i1 = 0; i1 < keys0.length; ++i1) {
encoder2.encodeString(keys0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
}
}
{
var encoder2 = encoder1.encodePointerArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
for (int i1 = 0; i1 < values0.length; ++i1) {
encoder2.encodeString(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
}
}
}
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
"customHeaders of struct HttpResponse: $e";
rethrow;
}
}
String toString() {
return "HttpResponse("
"statusCode: $statusCode" ", "
"body: $body" ", "
"contentLength: $contentLength" ", "
"contentType: $contentType" ", "
"customHeaders: $customHeaders" ")";
}
Map toJson() {
throw new bindings.MojoCodecError(
'Object containing handles cannot be encoded to JSON.');
}
}