/* * upb - a minimalist implementation of protocol buffers. * * Copyright (c) 2014 Google Inc. See LICENSE for details. * Author: Josh Haberman * * upb::json::Parser can parse JSON according to a specific schema. * Support for parsing arbitrary JSON (schema-less) will be added later. */ #ifndef UPB_JSON_PARSER_H_ #define UPB_JSON_PARSER_H_ #include "upb/env.h" #include "upb/sink.h" #ifdef __cplusplus namespace upb { namespace json { class Parser; } // namespace json } // namespace upb #endif UPB_DECLARE_TYPE(upb::json::Parser, upb_json_parser); /* upb::json::Parser **********************************************************/ // Preallocation hint: parser won't allocate more bytes than this when first // constructed. This hint may be an overestimate for some build configurations. // But if the parser library is upgraded without recompiling the application, // it may be an underestimate. #define UPB_JSON_PARSER_SIZE 3568 #ifdef __cplusplus // Parses an incoming BytesStream, pushing the results to the destination sink. class upb::json::Parser { public: static Parser* Create(Environment* env, Sink* output); BytesSink* input(); private: UPB_DISALLOW_POD_OPS(Parser, upb::json::Parser); }; #endif UPB_BEGIN_EXTERN_C upb_json_parser *upb_json_parser_create(upb_env *e, upb_sink *output); upb_bytessink *upb_json_parser_input(upb_json_parser *p); UPB_END_EXTERN_C #ifdef __cplusplus namespace upb { namespace json { inline Parser* Parser::Create(Environment* env, Sink* output) { return upb_json_parser_create(env, output); } inline BytesSink* Parser::input() { return upb_json_parser_input(this); } } // namespace json } // namespace upb #endif #endif // UPB_JSON_PARSER_H_