{"action":"created","comment":{"url":"https://api.github.com/repos/google/flatbuffers/pulls/comments/176599862","pull_request_review_id":106334611,"id":176599862,"diff_hunk":"@@ -0,0 +1,1095 @@\n+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file\n+// for details. All rights reserved. Use of this source code is governed by a\n+// BSD-style license that can be found in the LICENSE file.\n+\n+import 'dart:collection';\n+import 'dart:convert';\n+import 'dart:math';\n+import 'dart:typed_data';\n+\n+/**\n+ * Reader of lists of boolean values.\n+ *\n+ * The returned unmodifiable lists lazily read values on access.\n+ */\n+class BoolListReader extends Reader<List<bool>> {\n+  const BoolListReader();\n+\n+  @override\n+  int get size => 4;\n+\n+  @override\n+  List<bool> read(BufferContext bc, int offset) =>\n+      new _FbBoolList(bc, bc.derefObject(offset));\n+}\n+\n+/**\n+ * The reader of booleans.\n+ */\n+class BoolReader extends Reader<bool> {\n+  const BoolReader() : super();\n+\n+  @override\n+  int get size => 1;\n+\n+  @override\n+  bool read(BufferContext bc, int offset) => bc._getInt8(offset) != 0;\n+}\n+\n+/**\n+ * Buffer with data and some context about it.\n+ */\n+class BufferContext {\n+  final ByteData _buffer;\n+\n+  factory BufferContext.fromBytes(List<int> byteList) {\n+    Uint8List uint8List = _asUint8List(byteList);\n+    ByteData buf = new ByteData.view(uint8List.buffer, uint8List.offsetInBytes);\n+    return new BufferContext._(buf);\n+  }\n+\n+  BufferContext._(this._buffer);\n+\n+  int derefObject(int offset) {\n+    return offset + _getUint32(offset);\n+  }\n+\n+  Uint8List _asUint8LIst(int offset, int length) =>\n+      _buffer.buffer.asUint8List(_buffer.offsetInBytes + offset, length);\n+\n+  double _getFloat64(int offset) =>\n+      _buffer.getFloat64(offset, Endianness.LITTLE_ENDIAN);\n+\n+  double _getFloat32(int offset) =>\n+      _buffer.getFloat32(offset, Endianness.LITTLE_ENDIAN);\n+\n+  int _getInt32(int offset) =>\n+      _buffer.getInt32(offset, Endianness.LITTLE_ENDIAN);\n+\n+  int _getInt16(int offset) =>\n+      _buffer.getInt16(offset, Endianness.LITTLE_ENDIAN);\n+\n+  int _getInt8(int offset) => _buffer.getInt8(offset);\n+\n+  int _getUint32(int offset) =>\n+      _buffer.getUint32(offset, Endianness.LITTLE_ENDIAN);\n+\n+  int _getUint16(int offset) =>\n+      _buffer.getUint16(offset, Endianness.LITTLE_ENDIAN);\n+\n+  int _getUint8(int offset) => _buffer.getUint8(offset);\n+\n+  /// If the [byteList] is already a [Uint8List] return it.\n+  /// Otherwise return a [Uint8List] copy of the [byteList].\n+  static Uint8List _asUint8List(List<int> byteList) {\n+    if (byteList is Uint8List) {\n+      return byteList;\n+    } else {\n+      return new Uint8List.fromList(byteList);\n+    }\n+  }\n+}\n+\n+/**\n+ * Class that helps building flat buffers.\n+ */\n+class Builder {\n+  final int initialSize;\n+\n+  /// The list of existing VTable(s).\n+  final List<_VTable> _vTables = <_VTable>[];\n+\n+  ByteData _buf;\n+\n+  /// The maximum alignment that has been seen so far.  If [_buf] has to be\n+  /// reallocated in the future (to insert room at its start for more bytes) the\n+  /// reallocation will need to be a multiple of this many bytes.\n+  int _maxAlign;\n+\n+  /// The number of bytes that have been written to the buffer so far.  The\n+  /// most recently written byte is this many bytes from the end of [_buf].\n+  int _tail;\n+\n+  /// The location of the end of the current table, measured in bytes from the\n+  /// end of [_buf], or `null` if a table is not currently being built.\n+  int _currentTableEndTail;\n+\n+  _VTable _currentVTable;\n+\n+  /// Map containing all strings that have been written so far.  This allows us\n+  /// to avoid duplicating strings.\n+  Map<String, Offset<String>> _strings = <String, Offset<String>>{};\n+\n+  Builder({this.initialSize: 1024}) {\n+    reset();\n+  }\n+\n+  /// Add the [field] with the given boolean [value].  The field is not added if\n+  /// the [value] is equal to [def].  Booleans are stored as 8-bit fields with\n+  /// `0` for `false` and `1` for `true`.\n+  void addBool(int field, bool value, [bool def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 1;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _buf.setInt8(_buf.lengthInBytes - _tail, value ? 1 : 0);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 32-bit signed integer [value].  The field is\n+  /// not added if the [value] is equal to [def].\n+  void addInt32(int field, int value, [int def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 4;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setInt32AtTail(_buf, _tail, value);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 32-bit signed integer [value].  The field is\n+  /// not added if the [value] is equal to [def].\n+  void addInt16(int field, int value, [int def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 2;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setInt16AtTail(_buf, _tail, value);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 8-bit signed integer [value].  The field is\n+  /// not added if the [value] is equal to [def].\n+  void addInt8(int field, int value, [int def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 1;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setInt8AtTail(_buf, _tail, value);\n+    }\n+  }\n+\n+  /// Add the [field] referencing an object with the given [offset].\n+  void addOffset(int field, Offset offset) {\n+    _ensureCurrentVTable();\n+    if (offset != null) {\n+      _prepare(4, 1);\n+      _trackField(field);\n+      _setUint32AtTail(_buf, _tail, _tail - offset._tail);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 32-bit unsigned integer [value].  The field\n+  /// is not added if the [value] is equal to [def].\n+  void addUint32(int field, int value, [int def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 4;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setUint32AtTail(_buf, _tail, value);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 32-bit unsigned integer [value].  The field\n+  /// is not added if the [value] is equal to [def].\n+  void addUint16(int field, int value, [int def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 2;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setUint16AtTail(_buf, _tail, value);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 8-bit unsigned integer [value].  The field\n+  /// is not added if the [value] is equal to [def].\n+  void addUint8(int field, int value, [int def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 1;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setUint8AtTail(_buf, _tail, value);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 32-bit unsigned integer [value].  The field\n+  /// is not added if the [value] is equal to [def].\n+  void addFloat32(int field, double value, [double def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 4;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setFloat32AtTail(_buf, _tail, value);\n+    }\n+  }\n+\n+  /// Add the [field] with the given 32-bit unsigned integer [value].  The field\n+  /// is not added if the [value] is equal to [def].\n+  void addUint64(int field, double value, [double def]) {\n+    _ensureCurrentVTable();\n+    if (value != null && value != def) {\n+      int size = 4;\n+      _prepare(size, 1);\n+      _trackField(field);\n+      _setFloat64AtTail(_buf, _tail, value);\n+    }\n+  }\n+  /// End the current table and return its offset.\n+  Offset endTable() {\n+    if (_currentVTable == null) {\n+      throw new StateError('Start a table before ending it.');\n+    }\n+    // Prepare for writing the VTable.\n+    _prepare(4, 1);\n+    int tableTail = _tail;\n+    // Prepare the size of the current table.\n+    _currentVTable.tableSize = tableTail - _currentTableEndTail;\n+    // Prepare the VTable to use for the current table.\n+    int vTableTail;\n+    {\n+      _currentVTable.computeFieldOffsets(tableTail);\n+      // Try to find an existing compatible VTable.\n+      for (int i = 0; i < _vTables.length; i++) {\n+        _VTable vTable = _vTables[i];\n+        if (_currentVTable.canUseExistingVTable(vTable)) {\n+          vTableTail = vTable.tail;\n+          break;\n+        }\n+      }\n+      // Write a new VTable.\n+      if (vTableTail == null) {\n+        _prepare(2, _currentVTable.numOfUint16);\n+        vTableTail = _tail;\n+        _currentVTable.tail = vTableTail;\n+        _currentVTable.output(_buf, _buf.lengthInBytes - _tail);\n+        _vTables.add(_currentVTable);\n+      }\n+    }\n+    // Set the VTable offset.\n+    _setInt32AtTail(_buf, tableTail, vTableTail - tableTail);\n+    // Done with this table.\n+    _currentVTable = null;\n+    return new Offset(tableTail);\n+  }\n+\n+  /// Finish off the creation of the buffer.  The given [offset] is used as the\n+  /// root object offset, and usually references directly or indirectly every\n+  /// written object.  If [fileIdentifier] is specified (and not `null`), it is\n+  /// interpreted as a 4-byte Latin-1 encoded string that should be placed at\n+  /// bytes 4-7 of the file.\n+  Uint8List finish(Offset offset, [String fileIdentifier]) {\n+    _prepare(max(4, _maxAlign), fileIdentifier == null ? 1 : 2);\n+    int alignedTail = _tail + ((-_tail) % _maxAlign);\n+    _setUint32AtTail(_buf, alignedTail, alignedTail - offset._tail);\n+    if (fileIdentifier != null) {\n+      for (int i = 0; i < 4; i++) {\n+        _setUint8AtTail(\n+            _buf, alignedTail - 4 - i, fileIdentifier.codeUnitAt(i));\n+      }\n+    }\n+    return _buf.buffer.asUint8List(_buf.lengthInBytes - alignedTail);\n+  }\n+\n+  /// This is a low-level method, it should not be invoked by clients.\n+  Uint8List lowFinish() {\n+    int alignedTail = _tail + ((-_tail) % _maxAlign);\n+    return _buf.buffer.asUint8List(_buf.lengthInBytes - alignedTail);\n+  }\n+\n+  /// This is a low-level method, it should not be invoked by clients.\n+  void lowReset() {\n+    _buf = new ByteData(initialSize);\n+    _maxAlign = 1;\n+    _tail = 0;\n+  }\n+\n+  /// This is a low-level method, it should not be invoked by clients.\n+  void lowWriteUint32(int value) {\n+    _prepare(4, 1);\n+    _setUint32AtTail(_buf, _tail, value);\n+  }\n+\n+  /// This is a low-level method, it should not be invoked by clients.\n+  void lowWriteUint16(int value) {\n+    _prepare(2, 1);\n+    _setUint16AtTail(_buf, _tail, value);\n+  }\n+\n+  /// This is a low-level method, it should not be invoked by clients.\n+  void lowWriteUint8(int value) {\n+    _prepare(1, 1);\n+    _buf.setUint8(_buf.lengthInBytes - _tail, value);\n+  }\n+\n+  /// Reset the builder and make it ready for filling a new buffer.\n+  void reset() {\n+    _buf = new ByteData(initialSize);\n+    _maxAlign = 1;\n+    _tail = 0;\n+    _currentVTable = null;\n+  }\n+\n+  /// Start a new table.  Must be finished with [endTable] invocation.\n+  void startTable() {\n+    if (_currentVTable != null) {\n+      throw new StateError('Inline tables are not supported.');\n+    }\n+    _currentVTable = new _VTable();\n+    _currentTableEndTail = _tail;\n+  }\n+\n+  /// Write the given list of [values].\n+  Offset writeList(List<Offset> values) {\n+    _ensureNoVTable();\n+    _prepare(4, 1 + values.length);\n+    Offset result = new Offset(_tail);\n+    int tail = _tail;\n+    _setUint32AtTail(_buf, tail, values.length);\n+    tail -= 4;\n+    for (Offset value in values) {\n+      _setUint32AtTail(_buf, tail, tail - value._tail);\n+      tail -= 4;\n+    }\n+    return result;\n+  }\n+\n+  /// Write the given list of boolean [values].\n+  Offset writeListBool(List<bool> values) {\n+    int bitLength = values.length;\n+    int padding = (-bitLength) % 8;\n+    int byteLength = (bitLength + padding) ~/ 8;\n+    // Prepare the backing Uint8List.\n+    Uint8List bytes = new Uint8List(byteLength + 1);\n+    // Record every bit.\n+    int byteIndex = 0;\n+    int byte = 0;\n+    int mask = 1;\n+    for (int bitIndex = 0; bitIndex < bitLength; bitIndex++) {\n+      if (bitIndex != 0 && (bitIndex % 8 == 0)) {\n+        bytes[byteIndex++] = byte;\n+        byte = 0;\n+        mask = 1;\n+      }\n+      if (values[bitIndex]) {\n+        byte |= mask;\n+      }\n+      mask <<= 1;\n+    }\n+    // Write the last byte, even if it may be on the padding.\n+    bytes[byteIndex] = byte;\n+    // Write the padding length.\n+    bytes[byteLength] = padding;\n+    // Write as a Uint8 list.\n+    return writeListUint8(bytes);\n+  }\n+\n+  /// Write the given list of 64-bit float [values].\n+  Offset writeListFloat64(List<double> values) {","path":"dart/flat_buffers.dart","position":395,"original_position":395,"commit_id":"88a6c47400d50e5f89d37c45d38a8577e6d5f19e","original_commit_id":"88a6c47400d50e5f89d37c45d38a8577e6d5f19e","user":{"login":"dnfield","id":8620741,"avatar_url":"https://avatars3.githubusercontent.com/u/8620741?v=4","gravatar_id":"","url":"https://api.github.com/users/dnfield","html_url":"https://github.com/dnfield","followers_url":"https://api.github.com/users/dnfield/followers","following_url":"https://api.github.com/users/dnfield/following{/other_user}","gists_url":"https://api.github.com/users/dnfield/gists{/gist_id}","starred_url":"https://api.github.com/users/dnfield/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dnfield/subscriptions","organizations_url":"https://api.github.com/users/dnfield/orgs","repos_url":"https://api.github.com/users/dnfield/repos","events_url":"https://api.github.com/users/dnfield/events{/privacy}","received_events_url":"https://api.github.com/users/dnfield/received_events","type":"User","site_admin":false},"body":"This would only make sense as a generic if the methods it called and setup it did could be done generically.  Each function has to do setup that is aware of the size in bytes of the type it's writing, and has to call a concrete non-generic implementation of a writer function.","created_at":"2018-03-22T23:16:27Z","updated_at":"2018-03-22T23:16:27Z","html_url":"https://github.com/google/flatbuffers/pull/4676#discussion_r176599862","pull_request_url":"https://api.github.com/repos/google/flatbuffers/pulls/4676","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/google/flatbuffers/pulls/comments/176599862"},"html":{"href":"https://github.com/google/flatbuffers/pull/4676#discussion_r176599862"},"pull_request":{"href":"https://api.github.com/repos/google/flatbuffers/pulls/4676"}},"in_reply_to_id":176546794},"pull_request":{"url":"https://api.github.com/repos/google/flatbuffers/pulls/4676","id":176393482,"html_url":"https://github.com/google/flatbuffers/pull/4676","diff_url":"https://github.com/google/flatbuffers/pull/4676.diff","patch_url":"https://github.com/google/flatbuffers/pull/4676.patch","issue_url":"https://api.github.com/repos/google/flatbuffers/issues/4676","number":4676,"state":"open","locked":false,"title":"Add [Dart] support","user":{"login":"dnfield","id":8620741,"avatar_url":"https://avatars3.githubusercontent.com/u/8620741?v=4","gravatar_id":"","url":"https://api.github.com/users/dnfield","html_url":"https://github.com/dnfield","followers_url":"https://api.github.com/users/dnfield/followers","following_url":"https://api.github.com/users/dnfield/following{/other_user}","gists_url":"https://api.github.com/users/dnfield/gists{/gist_id}","starred_url":"https://api.github.com/users/dnfield/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dnfield/subscriptions","organizations_url":"https://api.github.com/users/dnfield/orgs","repos_url":"https://api.github.com/users/dnfield/repos","events_url":"https://api.github.com/users/dnfield/events{/privacy}","received_events_url":"https://api.github.com/users/dnfield/received_events","type":"User","site_admin":false},"body":"Adds Dart support.\r\n\r\nWork is primarily based on work done by the Dart SDK team.\r\n\r\nModifications to flat_buffers.dart:\r\n- Add support for Float32 and Int16\r\n\r\nThings handled here that don't appear to be handled in SDK version currently:\r\n- Unions\r\n- Non-zero based enums\r\n- Int16 and Float32 values/vectors\r\n- Access to reader functionality for generated types outside of the library\r\n- Namespaces (especially multiple namespaces in a single file)\r\n\r\nThings I probably still need but could use some guidance on:\r\n- [ ] (Unit? other?) tests\r\n- [ ] Documentation\r\n- [ ] Publish flat_buffers.dart to dartpub\r\n\r\nSee also #4487 ","created_at":"2018-03-21T06:49:34Z","updated_at":"2018-03-22T23:16:27Z","closed_at":null,"merged_at":null,"merge_commit_sha":"459cdc74c575fea68ba575dca9f4779476282103","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/google/flatbuffers/pulls/4676/commits","review_comments_url":"https://api.github.com/repos/google/flatbuffers/pulls/4676/comments","review_comment_url":"https://api.github.com/repos/google/flatbuffers/pulls/comments{/number}","comments_url":"https://api.github.com/repos/google/flatbuffers/issues/4676/comments","statuses_url":"https://api.github.com/repos/google/flatbuffers/statuses/88a6c47400d50e5f89d37c45d38a8577e6d5f19e","head":{"label":"dnfield:dart","ref":"dart","sha":"88a6c47400d50e5f89d37c45d38a8577e6d5f19e","user":{"login":"dnfield","id":8620741,"avatar_url":"https://avatars3.githubusercontent.com/u/8620741?v=4","gravatar_id":"","url":"https://api.github.com/users/dnfield","html_url":"https://github.com/dnfield","followers_url":"https://api.github.com/users/dnfield/followers","following_url":"https://api.github.com/users/dnfield/following{/other_user}","gists_url":"https://api.github.com/users/dnfield/gists{/gist_id}","starred_url":"https://api.github.com/users/dnfield/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dnfield/subscriptions","organizations_url":"https://api.github.com/users/dnfield/orgs","repos_url":"https://api.github.com/users/dnfield/repos","events_url":"https://api.github.com/users/dnfield/events{/privacy}","received_events_url":"https://api.github.com/users/dnfield/received_events","type":"User","site_admin":false},"repo":{"id":125660098,"name":"flatbuffers","full_name":"dnfield/flatbuffers","owner":{"login":"dnfield","id":8620741,"avatar_url":"https://avatars3.githubusercontent.com/u/8620741?v=4","gravatar_id":"","url":"https://api.github.com/users/dnfield","html_url":"https://github.com/dnfield","followers_url":"https://api.github.com/users/dnfield/followers","following_url":"https://api.github.com/users/dnfield/following{/other_user}","gists_url":"https://api.github.com/users/dnfield/gists{/gist_id}","starred_url":"https://api.github.com/users/dnfield/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dnfield/subscriptions","organizations_url":"https://api.github.com/users/dnfield/orgs","repos_url":"https://api.github.com/users/dnfield/repos","events_url":"https://api.github.com/users/dnfield/events{/privacy}","received_events_url":"https://api.github.com/users/dnfield/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dnfield/flatbuffers","description":"Memory Efficient Serialization Library","fork":true,"url":"https://api.github.com/repos/dnfield/flatbuffers","forks_url":"https://api.github.com/repos/dnfield/flatbuffers/forks","keys_url":"https://api.github.com/repos/dnfield/flatbuffers/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dnfield/flatbuffers/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dnfield/flatbuffers/teams","hooks_url":"https://api.github.com/repos/dnfield/flatbuffers/hooks","issue_events_url":"https://api.github.com/repos/dnfield/flatbuffers/issues/events{/number}","events_url":"https://api.github.com/repos/dnfield/flatbuffers/events","assignees_url":"https://api.github.com/repos/dnfield/flatbuffers/assignees{/user}","branches_url":"https://api.github.com/repos/dnfield/flatbuffers/branches{/branch}","tags_url":"https://api.github.com/repos/dnfield/flatbuffers/tags","blobs_url":"https://api.github.com/repos/dnfield/flatbuffers/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dnfield/flatbuffers/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dnfield/flatbuffers/git/refs{/sha}","trees_url":"https://api.github.com/repos/dnfield/flatbuffers/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dnfield/flatbuffers/statuses/{sha}","languages_url":"https://api.github.com/repos/dnfield/flatbuffers/languages","stargazers_url":"https://api.github.com/repos/dnfield/flatbuffers/stargazers","contributors_url":"https://api.github.com/repos/dnfield/flatbuffers/contributors","subscribers_url":"https://api.github.com/repos/dnfield/flatbuffers/subscribers","subscription_url":"https://api.github.com/repos/dnfield/flatbuffers/subscription","commits_url":"https://api.github.com/repos/dnfield/flatbuffers/commits{/sha}","git_commits_url":"https://api.github.com/repos/dnfield/flatbuffers/git/commits{/sha}","comments_url":"https://api.github.com/repos/dnfield/flatbuffers/comments{/number}","issue_comment_url":"https://api.github.com/repos/dnfield/flatbuffers/issues/comments{/number}","contents_url":"https://api.github.com/repos/dnfield/flatbuffers/contents/{+path}","compare_url":"https://api.github.com/repos/dnfield/flatbuffers/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dnfield/flatbuffers/merges","archive_url":"https://api.github.com/repos/dnfield/flatbuffers/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dnfield/flatbuffers/downloads","issues_url":"https://api.github.com/repos/dnfield/flatbuffers/issues{/number}","pulls_url":"https://api.github.com/repos/dnfield/flatbuffers/pulls{/number}","milestones_url":"https://api.github.com/repos/dnfield/flatbuffers/milestones{/number}","notifications_url":"https://api.github.com/repos/dnfield/flatbuffers/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dnfield/flatbuffers/labels{/name}","releases_url":"https://api.github.com/repos/dnfield/flatbuffers/releases{/id}","deployments_url":"https://api.github.com/repos/dnfield/flatbuffers/deployments","created_at":"2018-03-17T18:59:06Z","updated_at":"2018-03-17T18:59:09Z","pushed_at":"2018-03-22T00:33:41Z","git_url":"git://github.com/dnfield/flatbuffers.git","ssh_url":"git@github.com:dnfield/flatbuffers.git","clone_url":"https://github.com/dnfield/flatbuffers.git","svn_url":"https://github.com/dnfield/flatbuffers","homepage":"http://google.github.io/flatbuffers/","size":5892,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"google:master","ref":"master","sha":"c0a6e5120d6dd5d7b9de314d43fb55e71dee828d","user":{"login":"google","id":1342004,"avatar_url":"https://avatars1.githubusercontent.com/u/1342004?v=4","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"repo":{"id":19953044,"name":"flatbuffers","full_name":"google/flatbuffers","owner":{"login":"google","id":1342004,"avatar_url":"https://avatars1.githubusercontent.com/u/1342004?v=4","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/google/flatbuffers","description":"Memory Efficient Serialization Library","fork":false,"url":"https://api.github.com/repos/google/flatbuffers","forks_url":"https://api.github.com/repos/google/flatbuffers/forks","keys_url":"https://api.github.com/repos/google/flatbuffers/keys{/key_id}","collaborators_url":"https://api.github.com/repos/google/flatbuffers/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/google/flatbuffers/teams","hooks_url":"https://api.github.com/repos/google/flatbuffers/hooks","issue_events_url":"https://api.github.com/repos/google/flatbuffers/issues/events{/number}","events_url":"https://api.github.com/repos/google/flatbuffers/events","assignees_url":"https://api.github.com/repos/google/flatbuffers/assignees{/user}","branches_url":"https://api.github.com/repos/google/flatbuffers/branches{/branch}","tags_url":"https://api.github.com/repos/google/flatbuffers/tags","blobs_url":"https://api.github.com/repos/google/flatbuffers/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/google/flatbuffers/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/google/flatbuffers/git/refs{/sha}","trees_url":"https://api.github.com/repos/google/flatbuffers/git/trees{/sha}","statuses_url":"https://api.github.com/repos/google/flatbuffers/statuses/{sha}","languages_url":"https://api.github.com/repos/google/flatbuffers/languages","stargazers_url":"https://api.github.com/repos/google/flatbuffers/stargazers","contributors_url":"https://api.github.com/repos/google/flatbuffers/contributors","subscribers_url":"https://api.github.com/repos/google/flatbuffers/subscribers","subscription_url":"https://api.github.com/repos/google/flatbuffers/subscription","commits_url":"https://api.github.com/repos/google/flatbuffers/commits{/sha}","git_commits_url":"https://api.github.com/repos/google/flatbuffers/git/commits{/sha}","comments_url":"https://api.github.com/repos/google/flatbuffers/comments{/number}","issue_comment_url":"https://api.github.com/repos/google/flatbuffers/issues/comments{/number}","contents_url":"https://api.github.com/repos/google/flatbuffers/contents/{+path}","compare_url":"https://api.github.com/repos/google/flatbuffers/compare/{base}...{head}","merges_url":"https://api.github.com/repos/google/flatbuffers/merges","archive_url":"https://api.github.com/repos/google/flatbuffers/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/google/flatbuffers/downloads","issues_url":"https://api.github.com/repos/google/flatbuffers/issues{/number}","pulls_url":"https://api.github.com/repos/google/flatbuffers/pulls{/number}","milestones_url":"https://api.github.com/repos/google/flatbuffers/milestones{/number}","notifications_url":"https://api.github.com/repos/google/flatbuffers/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/google/flatbuffers/labels{/name}","releases_url":"https://api.github.com/repos/google/flatbuffers/releases{/id}","deployments_url":"https://api.github.com/repos/google/flatbuffers/deployments","created_at":"2014-05-19T18:33:01Z","updated_at":"2018-03-22T19:11:00Z","pushed_at":"2018-03-22T09:37:28Z","git_url":"git://github.com/google/flatbuffers.git","ssh_url":"git@github.com:google/flatbuffers.git","clone_url":"https://github.com/google/flatbuffers.git","svn_url":"https://github.com/google/flatbuffers","homepage":"http://google.github.io/flatbuffers/","size":5900,"stargazers_count":9160,"watchers_count":9160,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":1431,"mirror_url":null,"archived":false,"open_issues_count":218,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":1431,"open_issues":218,"watchers":9160,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/google/flatbuffers/pulls/4676"},"html":{"href":"https://github.com/google/flatbuffers/pull/4676"},"issue":{"href":"https://api.github.com/repos/google/flatbuffers/issues/4676"},"comments":{"href":"https://api.github.com/repos/google/flatbuffers/issues/4676/comments"},"review_comments":{"href":"https://api.github.com/repos/google/flatbuffers/pulls/4676/comments"},"review_comment":{"href":"https://api.github.com/repos/google/flatbuffers/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/google/flatbuffers/pulls/4676/commits"},"statuses":{"href":"https://api.github.com/repos/google/flatbuffers/statuses/88a6c47400d50e5f89d37c45d38a8577e6d5f19e"}},"author_association":"NONE"}}
{"actor":{"display_login":"dnfield"}}