/* ** upb::json::Printer ** ** Handlers that emit JSON according to a specific protobuf schema. */ #ifndef UPB_JSON_TYPED_PRINTER_H_ #define UPB_JSON_TYPED_PRINTER_H_ #include "upb/sink.h" #ifdef __cplusplus namespace upb { namespace json { class PrinterPtr; } /* namespace json */ } /* namespace upb */ #endif /* upb_json_printer ***********************************************************/ #define UPB_JSON_PRINTER_SIZE 192 struct upb_json_printer; typedef struct upb_json_printer upb_json_printer; #ifdef __cplusplus extern "C" { #endif /* Native C API. */ upb_json_printer *upb_json_printer_create(upb_arena *a, const upb_handlers *h, upb_bytessink output); upb_sink upb_json_printer_input(upb_json_printer *p); const upb_handlers *upb_json_printer_newhandlers(const upb_msgdef *md, bool preserve_fieldnames, const void *owner); /* Lazily builds and caches handlers that will push encoded data to a bytessink. * Any msgdef objects used with this object must outlive it. */ upb_handlercache *upb_json_printer_newcache(bool preserve_proto_fieldnames); #ifdef __cplusplus } /* extern "C" */ /* Prints an incoming stream of data to a BytesSink in JSON format. */ class upb::json::PrinterPtr { public: PrinterPtr(upb_json_printer* ptr) : ptr_(ptr) {} static PrinterPtr Create(Arena *arena, const upb::Handlers *handlers, BytesSink output) { return PrinterPtr( upb_json_printer_create(arena->ptr(), handlers, output.sink())); } /* The input to the printer. */ Sink input() { return upb_json_printer_input(ptr_); } static const size_t kSize = UPB_JSON_PRINTER_SIZE; static HandlerCache NewCache(bool preserve_proto_fieldnames) { return upb_json_printer_newcache(preserve_proto_fieldnames); } private: upb_json_printer* ptr_; }; #endif /* __cplusplus */ #endif /* UPB_JSON_TYPED_PRINTER_H_ */