| 101 | |
| 102 | template <typename Stream> |
| 103 | static size_t ConsumeWholeObject(Stream&& stream) { |
| 104 | static constexpr unsigned parse_flags = rj::kParseIterativeFlag | |
| 105 | rj::kParseStopWhenDoneFlag | |
| 106 | rj::kParseNumbersAsStringsFlag; |
| 107 | rj::BaseReaderHandler<rj::UTF8<>> handler; |
| 108 | rj::Reader reader; |
| 109 | // parse a single JSON object |
| 110 | switch (reader.Parse<parse_flags>(stream, handler).Code()) { |
| 111 | case rj::kParseErrorNone: |
| 112 | return stream.Tell(); |
| 113 | case rj::kParseErrorDocumentEmpty: |
| 114 | return 0; |
| 115 | default: |
| 116 | // rapidjson emitted an error, the most recent object was partial |
| 117 | return string_view::npos; |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | namespace { |
| 122 | |