1 #ifndef ZSERIO_JSON_PARSER_H_INC 2 #define ZSERIO_JSON_PARSER_H_INC 17 template <
typename ALLOC = std::allocator<u
int8_t>>
64 virtual void visitValue(std::nullptr_t nullValue) = 0;
85 virtual void visitValue(uint64_t uintValue) = 0;
92 virtual void visitValue(
double doubleValue) = 0;
110 m_tokenizer(in, allocator), m_observer(observer)
139 return m_tokenizer.getLine();
149 return m_tokenizer.getColumn();
158 void parseElements();
167 static const std::array<JsonToken, 3> ELEMENT_TOKENS;
173 template <
typename ALLOC>
180 template <
typename ALLOC>
183 JsonToken token = m_tokenizer.getToken();
189 else if (token == JsonToken::VALUE)
192 throw createUnexpectedTokenException(ELEMENT_TOKENS);
195 template <
typename ALLOC>
199 m_observer.beginObject();
205 m_observer.endObject();
208 template <
typename ALLOC>
219 template <
typename ALLOC>
222 checkToken(JsonToken::VALUE);
227 ": Key must be a string value!";
237 template <
typename ALLOC>
241 m_observer.beginArray();
243 if (std::find(ELEMENT_TOKENS.begin(), ELEMENT_TOKENS.end(), m_tokenizer.getToken()) != ELEMENT_TOKENS.end())
247 m_observer.endArray();
250 template <
typename ALLOC>
261 template <
typename ALLOC>
268 template <
typename ALLOC>
273 if (value.template isType<std::nullptr_t>())
275 m_observer.visitValue(
nullptr);
277 else if (value.template isType<bool>())
279 m_observer.visitValue(value.template get<bool>());
281 else if (value.template isType<int64_t>())
283 m_observer.visitValue(value.template get<int64_t>());
285 else if (value.template isType<uint64_t>())
287 m_observer.visitValue(value.template get<uint64_t>());
289 else if (value.template isType<double>())
291 m_observer.visitValue(value.template get<double>());
299 template <
typename ALLOC>
302 if (m_tokenizer.getToken() != token)
303 throw createUnexpectedTokenException({{token}});
306 template <
typename ALLOC>
313 template <
typename ALLOC>
318 error <<
getLine() <<
":" <<
getColumn() <<
": unexpected token: " << m_tokenizer.getToken();
319 if (expecting.
size() == 1)
321 error <<
", expecting " << expecting[0] <<
"!";
325 error <<
", expecting one of [";
326 for (
size_t i = 0; i < expecting.
size(); ++i)
330 error << expecting[i];
342 #endif // ZSERIO_JSON_PARSER_H_INC virtual void beginObject()=0
virtual ~IObserver()=default
constexpr size_type size() const noexcept
virtual void endObject()=0
virtual void visitValue(std::nullptr_t nullValue)=0
virtual void endArray()=0
virtual void beginArray()=0
std::basic_string< char, std::char_traits< char >, RebindAlloc< ALLOC, char >> string
BasicJsonParser(std::istream &in, IObserver &observer, const ALLOC &allocator=ALLOC())
virtual void visitKey(StringView key)=0