FastLED 3.9.15
Loading...
Searching...
No Matches
response_send.h
Go to the documentation of this file.
1#pragma once
2
3#include "fl/stl/json.h"
4#include "fl/stl/function.h"
5#include "fl/stl/noexcept.h"
6
7namespace fl {
8
46public:
53 : mRequestId(requestId), mResponseSink(fl::move(sink)), mIsFinal(false) {}
54
55 // Non-copyable but movable
59 ResponseSend& operator=(ResponseSend&&) FL_NOEXCEPT = default;
60
68 void send(const fl::json& result) {
69 if (!mResponseSink || mIsFinal) {
70 return;
71 }
72
73 fl::json response = fl::json::object();
74 response.set("jsonrpc", "2.0");
75 response.set("result", result);
76 response.set("id", mRequestId);
77
78 mResponseSink(response);
79 }
80
88 void sendUpdate(const fl::json& update) {
89 if (!mResponseSink || mIsFinal) {
90 return;
91 }
92
93 fl::json response = fl::json::object();
94 response.set("jsonrpc", "2.0");
95
97 result.set("update", update);
98
99 response.set("result", result);
100 response.set("id", mRequestId);
101
102 mResponseSink(response);
103 }
104
114 void sendFinal(const fl::json& result) {
115 if (!mResponseSink || mIsFinal) {
116 return;
117 }
118
119 mIsFinal = true;
120
121 fl::json response = fl::json::object();
122 response.set("jsonrpc", "2.0");
123
124 fl::json finalResult = fl::json::object();
125 finalResult.set("value", result);
126 finalResult.set("stop", true);
127
128 response.set("result", finalResult);
129 response.set("id", mRequestId);
130
131 mResponseSink(response);
132 }
133
138 bool isFinal() const {
139 return mIsFinal;
140 }
141
146 const fl::json& requestId() const {
147 return mRequestId;
148 }
149
150private:
151 fl::json mRequestId; // Request ID from JSON-RPC request
152 fl::function<void(const fl::json&)> mResponseSink; // Function to send responses
153 bool mIsFinal; // True if sendFinal() was called
154};
155
156} // namespace fl
void send(const fl::json &result)
Send a single response (for ASYNC mode)
void sendFinal(const fl::json &result)
Send final response and mark stream as complete (for ASYNC_STREAM mode)
ResponseSend & operator=(const ResponseSend &) FL_NOEXCEPT=delete
ResponseSend(const fl::json &requestId, fl::function< void(const fl::json &)> sink)
Construct ResponseSend with request ID and response sink.
ResponseSend(const ResponseSend &) FL_NOEXCEPT=delete
ResponseSend(ResponseSend &&) FL_NOEXCEPT=default
void sendUpdate(const fl::json &update)
Send intermediate streaming update (for ASYNC_STREAM mode)
bool isFinal() const
Check if final response has been sent.
const fl::json & requestId() const
Get the request ID.
fl::function< void(const fl::json &)> mResponseSink
void set(const fl::string &key, const json &value) FL_NOEXCEPT
Definition json.h:701
static json object() FL_NOEXCEPT
Definition json.h:692
FastLED's Elegant JSON Library: fl::json
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
Definition move.h:28
expected< T, E > result
Alias for expected (Rust-style naming)
Definition result.h:31
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT