mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-24 06:05:01 +02:00
Introduce AsyncJsonWriter
output adapter interface
This commit is contained in:
parent
8ef921aa5e
commit
1c61bced03
@ -11,7 +11,6 @@
|
|||||||
#include <bitset>
|
#include <bitset>
|
||||||
#include <boost/exception_ptr.hpp>
|
#include <boost/exception_ptr.hpp>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <json.hpp>
|
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -4,10 +4,40 @@
|
|||||||
#define JSON_H
|
#define JSON_H
|
||||||
|
|
||||||
#include "base/i2-base.hpp"
|
#include "base/i2-base.hpp"
|
||||||
|
#include <boost/asio/spawn.hpp>
|
||||||
|
#include <json.hpp>
|
||||||
|
|
||||||
namespace icinga
|
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 String;
|
||||||
class Value;
|
class Value;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user