#ifndef JSON_HH #define JSON_HH #include #include #include #include #include namespace json { class Writer { public: virtual ~Writer() = default; virtual void value(std::string_view value) = 0; virtual void value(int64_t value) = 0; virtual void value(uint64_t value) = 0; virtual void value(float value) = 0; virtual void value(double value) = 0; virtual void value(bool value) = 0; virtual void value(std::nullptr_t) = 0; void value(char const* value); void value(int32_t value); void value(uint32_t value); virtual void start_array() = 0; virtual void end_array() = 0; virtual void start_object() = 0; virtual void key(std::string_view name) = 0; virtual void end_object() = 0; virtual void clear() = 0; protected: Writer() = default; Writer(Writer const&) = delete; Writer& operator=(Writer const&) = delete; }; std::unique_ptr writer(std::string& out); std::unique_ptr writer(std::ostream& out); } // namespace json #endif // JSON_HH