@@ -130,27 +130,50 @@ namespace glz::repe
130
130
template <opts Opts>
131
131
struct request_impl
132
132
{
133
- error_t operator ()(message& msg, const user_header& h) const
133
+ message operator ()(const user_header& h) const
134
+ {
135
+ message msg{};
136
+ msg.header = encode (h);
137
+ msg.header .read (true ); // because no value provided
138
+ msg.query = std::string{h.query };
139
+ msg.header .body_length = msg.body .size ();
140
+ msg.header .length = sizeof (repe::header) + msg.query .size () + msg.body .size ();
141
+ return msg;
142
+ }
143
+
144
+ template <class Value >
145
+ message operator ()(const user_header& h, Value&& value) const
146
+ {
147
+ message msg{};
148
+ msg.header = encode (h);
149
+ msg.query = std::string{h.query };
150
+ msg.header .write (true );
151
+ // TODO: Handle potential write errors and put in msg
152
+ std::ignore = glz::write <Opts>(std::forward<Value>(value), msg.body );
153
+ msg.header .body_length = msg.body .size ();
154
+ msg.header .length = sizeof (repe::header) + msg.query .size () + msg.body .size ();
155
+ return msg;
156
+ }
157
+
158
+ void operator ()(const user_header& h, message& msg) const
134
159
{
135
160
msg.header = encode (h);
136
161
msg.header .read (true ); // because no value provided
137
162
msg.query = std::string{h.query };
138
- std::ignore = glz::write <Opts>(nullptr , msg.body );
139
163
msg.header .body_length = msg.body .size ();
140
164
msg.header .length = sizeof (repe::header) + msg.query .size () + msg.body .size ();
141
- return {};
142
165
}
143
166
144
167
template <class Value >
145
- error_t operator ()(message& msg, const user_header& h, Value&& value) const
168
+ void operator ()(const user_header& h, Value&& value, message& msg ) const
146
169
{
147
170
msg.header = encode (h);
148
171
msg.query = std::string{h.query };
149
172
msg.header .write (true );
173
+ // TODO: Handle potential write errors and put in msg
150
174
std::ignore = glz::write <Opts>(std::forward<Value>(value), msg.body );
151
175
msg.header .body_length = msg.body .size ();
152
176
msg.header .length = sizeof (repe::header) + msg.query .size () + msg.body .size ();
153
- return {};
154
177
}
155
178
};
156
179
}
@@ -462,7 +485,8 @@ namespace glz::repe
462
485
});
463
486
}
464
487
465
- void call (message& in, message& out)
488
+ template <class In = message, class Out = message>
489
+ void call (In&& in, Out&& out)
466
490
{
467
491
if (auto it = methods.find (in.query ); it != methods.end ()) {
468
492
if (in.header .error ) {
0 commit comments