mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-23 05:34:48 +02:00
Introduce AsyncJsonWriter
output adapter interface
This commit is contained in:
parent
8ef921aa5e
commit
1c61bced03
@ -11,7 +11,6 @@
|
||||
#include <bitset>
|
||||
#include <boost/exception_ptr.hpp>
|
||||
#include <cstdint>
|
||||
#include <json.hpp>
|
||||
#include <stack>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
@ -4,10 +4,40 @@
|
||||
#define JSON_H
|
||||
|
||||
#include "base/i2-base.hpp"
|
||||
#include <boost/asio/spawn.hpp>
|
||||
#include <json.hpp>
|
||||
|
||||
namespace icinga
|
||||
{
|
||||
|
||||
/**
|
||||
* AsyncJsonWriter allows writing JSON data to any output stream asynchronously.
|
||||
*
|
||||
* All users of this class must ensure that the underlying output stream will not perform any asynchronous I/O
|
||||
* operations when the @c write_character() or @c write_characters() methods are called. They shall only perform
|
||||
* such ops when the @c JsonEncoder allows them to do so by calling the @c Flush() method.
|
||||
*
|
||||
* @ingroup base
|
||||
*/
|
||||
class AsyncJsonWriter : public nlohmann::detail::output_adapter_protocol<char>
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Flush instructs the underlying output stream to write any buffered data to wherever it is supposed to go.
|
||||
*
|
||||
* The @c JsonEncoder allows the stream to even perform asynchronous operations in a safe manner by calling
|
||||
* this method with a dedicated @c boost::asio::yield_context object. The stream must not perform any async
|
||||
* I/O operations triggered by methods other than this one. Any attempt to do so will result in undefined behavior.
|
||||
*
|
||||
* However, this doesn't necessarily enforce the stream to really flush its data immediately, but it's up
|
||||
* to the implementation to do whatever it needs to. The encoder just gives it a chance to do so by calling
|
||||
* this method.
|
||||
*
|
||||
* @param yield The yield context to use for asynchronous operations.
|
||||
*/
|
||||
virtual void Flush(boost::asio::yield_context& yield) = 0;
|
||||
};
|
||||
|
||||
class String;
|
||||
class Value;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user