Index: generated/googleapis/lib/common/common.dart |
diff --git a/generated/googleapis/lib/common/common.dart b/generated/googleapis/lib/common/common.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2441aede0835cf84bead41ca69fbfca8845b5308 |
--- /dev/null |
+++ b/generated/googleapis/lib/common/common.dart |
@@ -0,0 +1,186 @@ |
+library googleapis.common; |
+ |
+import 'dart:async' as async; |
+import 'dart:core' as core; |
+import 'dart:collection' as collection; |
+/** |
+ * Represents a media consisting of a stream of bytes, a content type and a |
+ * length. |
+ */ |
+class Media { |
+ final async.Stream<core.List<core.int>> stream; |
+ final core.String contentType; |
+ final core.int length; |
+ |
+ /** |
+ * Creates a new [Media] with a byte [stream] of length [length] with a |
+ * [contentType]. |
+ * |
+ * When uploading media, [length] can only be null if [ResumableUploadOptions] |
+ * is used. |
+ */ |
+ Media(this.stream, this.length, |
+ {this.contentType: "application/octet-stream"}) { |
+ if (stream == null || contentType == null) { |
+ throw new core.ArgumentError( |
+ 'Arguments stream, contentType and length must not be null.'); |
+ } |
+ if (length != null && length < 0) { |
+ throw new core.ArgumentError('A negative content length is not allowed'); |
+ } |
+ } |
+} |
+ |
+ |
+/** |
+ * Represents options for uploading a [Media]. |
+ */ |
+class UploadOptions { |
+ /** Use either simple uploads (only media) or multipart for media+metadata */ |
+ static const UploadOptions Default = const UploadOptions(); |
+ |
+ /** Make resumable uploads */ |
+ static final ResumableUploadOptions Resumable = new ResumableUploadOptions(); |
+ |
+ const UploadOptions(); |
+} |
+ |
+ |
+/** |
+ * Specifies options for resumable uploads. |
+ */ |
+class ResumableUploadOptions extends UploadOptions { |
+ static final core.Function ExponentialBackoff = (core.int failedAttempts) { |
+ // Do not retry more than 5 times. |
+ if (failedAttempts > 5) return null; |
+ |
+ // Wait for 2^(failedAttempts-1) seconds, before retrying. |
+ // i.e. 1 second, 2 seconds, 4 seconds, ... |
+ return new core.Duration(seconds: 1 << (failedAttempts - 1)); |
+ }; |
+ |
+ /** |
+ * Maximum number of upload attempts per chunk. |
+ */ |
+ final core.int numberOfAttempts; |
+ |
+ /** |
+ * Preferred size (in bytes) of a uploaded chunk. |
+ * Must be a multiple of 256 KB. |
+ * |
+ * The default is 1 MB. |
+ */ |
+ final core.int chunkSize; |
+ |
+ /** |
+ * Function for determining the [core.Duration] to wait before making the |
+ * next attempt. See [ExponentialBackoff] for an example. |
+ */ |
+ final core.Function backoffFunction; |
+ |
+ ResumableUploadOptions({this.numberOfAttempts: 3, |
+ this.chunkSize: 1024 * 1024, |
+ core.Function backoffFunction}) |
+ : backoffFunction = backoffFunction == null ? |
+ ExponentialBackoff : backoffFunction { |
+ // See e.g. here: |
+ // https://developers.google.com/maps-engine/documentation/resumable-upload |
+ // |
+ // Chunk size restriction: |
+ // There are some chunk size restrictions based on the size of the file you |
+ // are uploading. Files larger than 256 KB (256 x 1024 bytes) must have |
+ // chunk sizes that are multiples of 256 KB. For files smaller than 256 KB, |
+ // there are no restrictions. In either case, the final chunk has no |
+ // limitations; you can simply transfer the remaining bytes. If you use |
+ // chunking, it is important to keep the chunk size as large as possible |
+ // to keep the upload efficient. |
+ // |
+ if (numberOfAttempts < 1 || (chunkSize % (256 * 1024)) != 0) { |
+ throw new core.ArgumentError('Invalid arguments.'); |
+ } |
+ } |
+} |
+ |
+ |
+/** |
+ * Represents options for downloading media. |
+ * |
+ * For partial downloads, see [PartialDownloadOptions]. |
+ */ |
+class DownloadOptions { |
+ /** Download only metadata. */ |
+ static const DownloadOptions Metadata = const DownloadOptions(); |
+ |
+ /** Download full media. */ |
+ static final PartialDownloadOptions FullMedia = |
+ new PartialDownloadOptions(new ByteRange(0, -1)); |
+ |
+ const DownloadOptions(); |
+ |
+ /** Indicates whether metadata should be downloaded. */ |
+ core.bool get isMetadataDownload => true; |
+} |
+ |
+ |
+/** |
+ * Options for downloading a [Media]. |
+ */ |
+class PartialDownloadOptions extends DownloadOptions { |
+ /** The range of bytes to be downloaded */ |
+ final ByteRange range; |
+ |
+ PartialDownloadOptions(this.range); |
+ |
+ core.bool get isMetadataDownload => false; |
+ |
+ /** |
+ * `true` if this is a full download and `false` if this is a partial |
+ * download. |
+ */ |
+ core.bool get isFullDownload => range.start == 0 && range.end == -1; |
+} |
+ |
+ |
+/** |
+ * Specifies a range of media. |
+ */ |
+class ByteRange { |
+ /** First byte of media. */ |
+ final core.int start; |
+ |
+ /** Last byte of media (inclusive) */ |
+ final core.int end; |
+ |
+ /** Length of this range (i.e. number of bytes) */ |
+ core.int get length => end - start + 1; |
+ |
+ ByteRange(this.start, this.end) { |
+ if (!(start == 0 && end == -1 || start >= 0 && end > start)) { |
+ throw new core.ArgumentError('Invalid media range [$start, $end]'); |
+ } |
+ } |
+} |
+ |
+ |
+/** |
+ * Represents a general error reported by the API endpoint. |
+ */ |
+class ApiRequestError extends core.Error { |
+ final core.String message; |
+ |
+ ApiRequestError(this.message); |
+ |
+ core.String toString() => 'ApiRequestError(message: $message)'; |
+} |
+ |
+/** |
+ * Represents a specific error reported by the API endpoint. |
+ */ |
+class DetailedApiRequestError extends ApiRequestError { |
+ final core.int status; |
+ |
+ DetailedApiRequestError(this.status, core.String message) : super(message); |
+ |
+ core.String toString() |
+ => 'DetailedApiRequestError(status: $status, message: $message)'; |
+} |