FastLED 3.10.8
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:
54
55 // Non-copyable but movable
59 ResponseSend& operator=(ResponseSend&&) FL_NO_EXCEPT = default;
60
68 void send(const fl::json& result) FL_NO_EXCEPT {
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) FL_NO_EXCEPT {
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
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 FL_NO_EXCEPT {
139 return mIsFinal;
140 }
141
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
const fl::json & requestId() const FL_NO_EXCEPT
Get the request ID.
ResponseSend(ResponseSend &&) FL_NO_EXCEPT=default
void sendFinal(const fl::json &result) FL_NO_EXCEPT
Send final response and mark stream as complete (for ASYNC_STREAM mode)
ResponseSend(const ResponseSend &) FL_NO_EXCEPT=delete
ResponseSend & operator=(const ResponseSend &) FL_NO_EXCEPT=delete
ResponseSend(const fl::json &requestId, fl::function< void(const fl::json &)> sink) FL_NO_EXCEPT
Construct ResponseSend with request ID and response sink.
bool isFinal() const FL_NO_EXCEPT
Check if final response has been sent.
void send(const fl::json &result) FL_NO_EXCEPT
Send a single response (for ASYNC mode)
fl::function< void(const fl::json &)> mResponseSink
void sendUpdate(const fl::json &update) FL_NO_EXCEPT
Send intermediate streaming update (for ASYNC_STREAM mode)
void set(const fl::string &key, const json &value) FL_NO_EXCEPT
Definition json.h:866
static json object() FL_NO_EXCEPT
Definition json.h:857
FastLED's Elegant JSON Library: fl::json
constexpr remove_reference< T >::type && move(T &&t) FL_NO_EXCEPT
Definition move.h:30
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
expected< T, E > result
Alias for expected (Rust-style naming)
Definition result.h:31
Base definition for an LED controller.
Definition crgb.hpp:179