18#include "../asrtl/chann.h"
19#include "../asrtl/flat_tree.h"
20#include "../asrtl/param_proto.h"
22enum asrt_param_client_state
24 ASRT_PARAM_CLIENT_IDLE = 0,
25 ASRT_PARAM_CLIENT_READY_RECV,
26 ASRT_PARAM_CLIENT_READY_SENT,
27 ASRT_PARAM_CLIENT_DELIVER,
28 ASRT_PARAM_CLIENT_QUERY_ERROR,
53 uint32_t cache_capacity;
55 asrt_flat_id cache_next_sibling;
61 enum asrt_param_client_state state;
81enum asrt_status asrt_param_client_init(
107typedef void ( *asrt_param_obj_cb )(
112typedef void ( *asrt_param_arr_cb )(
117typedef void ( *asrt_param_any_cb )(
124 asrt_param_any_cb any;
125 asrt_param_u32_cb u32;
126 asrt_param_i32_cb i32;
127 asrt_param_str_cb str;
128 asrt_param_float_cb flt;
129 asrt_param_bool_cb bln;
130 asrt_param_obj_cb obj;
131 asrt_param_arr_cb arr;
164enum asrt_status asrt_param_client_query(
167 asrt_flat_id node_id,
171static inline int asrt_param_query_pending(
struct asrt_param_client const* client )
173 return client->pending_query != NULL;
177static inline enum asrt_status asrt_param_client_fetch_any(
180 asrt_flat_id node_id,
181 asrt_param_any_cb cb,
184 query->expected_type = ASRT_FLAT_STYPE_NONE;
186 query->cb_ptr = cb_ptr;
187 return asrt_param_client_query( query, client, node_id, NULL );
190static inline enum asrt_status asrt_param_client_fetch_u32(
193 asrt_flat_id node_id,
194 asrt_param_u32_cb cb,
197 query->expected_type = ASRT_FLAT_STYPE_U32;
199 query->cb_ptr = cb_ptr;
200 return asrt_param_client_query( query, client, node_id, NULL );
203static inline enum asrt_status asrt_param_client_fetch_i32(
206 asrt_flat_id node_id,
207 asrt_param_i32_cb cb,
210 query->expected_type = ASRT_FLAT_STYPE_I32;
212 query->cb_ptr = cb_ptr;
213 return asrt_param_client_query( query, client, node_id, NULL );
216static inline enum asrt_status asrt_param_client_fetch_str(
219 asrt_flat_id node_id,
220 asrt_param_str_cb cb,
223 query->expected_type = ASRT_FLAT_STYPE_STR;
225 query->cb_ptr = cb_ptr;
226 return asrt_param_client_query( query, client, node_id, NULL );
229static inline enum asrt_status asrt_param_client_fetch_float(
232 asrt_flat_id node_id,
233 asrt_param_float_cb cb,
236 query->expected_type = ASRT_FLAT_STYPE_FLOAT;
238 query->cb_ptr = cb_ptr;
239 return asrt_param_client_query( query, client, node_id, NULL );
242static inline enum asrt_status asrt_param_client_fetch_bool(
245 asrt_flat_id node_id,
246 asrt_param_bool_cb cb,
249 query->expected_type = ASRT_FLAT_STYPE_BOOL;
251 query->cb_ptr = cb_ptr;
252 return asrt_param_client_query( query, client, node_id, NULL );
255static inline enum asrt_status asrt_param_client_fetch_obj(
258 asrt_flat_id node_id,
259 asrt_param_obj_cb cb,
262 query->expected_type = ASRT_FLAT_CTYPE_OBJECT;
264 query->cb_ptr = cb_ptr;
265 return asrt_param_client_query( query, client, node_id, NULL );
268static inline enum asrt_status asrt_param_client_fetch_arr(
271 asrt_flat_id node_id,
272 asrt_param_arr_cb cb,
275 query->expected_type = ASRT_FLAT_CTYPE_ARRAY;
277 query->cb_ptr = cb_ptr;
278 return asrt_param_client_query( query, client, node_id, NULL );
282static inline enum asrt_status asrt_param_client_find_any(
285 asrt_flat_id parent_id,
287 asrt_param_any_cb cb,
290 query->expected_type = ASRT_FLAT_STYPE_NONE;
292 query->cb_ptr = cb_ptr;
293 return asrt_param_client_query( query, client, parent_id, key );
296static inline enum asrt_status asrt_param_client_find_u32(
299 asrt_flat_id parent_id,
301 asrt_param_u32_cb cb,
304 query->expected_type = ASRT_FLAT_STYPE_U32;
306 query->cb_ptr = cb_ptr;
307 return asrt_param_client_query( query, client, parent_id, key );
310static inline enum asrt_status asrt_param_client_find_i32(
313 asrt_flat_id parent_id,
315 asrt_param_i32_cb cb,
318 query->expected_type = ASRT_FLAT_STYPE_I32;
320 query->cb_ptr = cb_ptr;
321 return asrt_param_client_query( query, client, parent_id, key );
324static inline enum asrt_status asrt_param_client_find_str(
327 asrt_flat_id parent_id,
329 asrt_param_str_cb cb,
332 query->expected_type = ASRT_FLAT_STYPE_STR;
334 query->cb_ptr = cb_ptr;
335 return asrt_param_client_query( query, client, parent_id, key );
338static inline enum asrt_status asrt_param_client_find_float(
341 asrt_flat_id parent_id,
343 asrt_param_float_cb cb,
346 query->expected_type = ASRT_FLAT_STYPE_FLOAT;
348 query->cb_ptr = cb_ptr;
349 return asrt_param_client_query( query, client, parent_id, key );
352static inline enum asrt_status asrt_param_client_find_bool(
355 asrt_flat_id parent_id,
357 asrt_param_bool_cb cb,
360 query->expected_type = ASRT_FLAT_STYPE_BOOL;
362 query->cb_ptr = cb_ptr;
363 return asrt_param_client_query( query, client, parent_id, key );
366static inline enum asrt_status asrt_param_client_find_obj(
369 asrt_flat_id parent_id,
371 asrt_param_obj_cb cb,
374 query->expected_type = ASRT_FLAT_CTYPE_OBJECT;
376 query->cb_ptr = cb_ptr;
377 return asrt_param_client_query( query, client, parent_id, key );
380static inline enum asrt_status asrt_param_client_find_arr(
383 asrt_flat_id parent_id,
385 asrt_param_arr_cb cb,
388 query->expected_type = ASRT_FLAT_CTYPE_ARRAY;
390 query->cb_ptr = cb_ptr;
391 return asrt_param_client_query( query, client, parent_id, key );
ASRT_NODISCARD asrt_status query(ref< asrt_param_client > cl, asrt_param_query *q, flat_id node_id, char const *key, CB &cb)
Submit a typed QUERY or FIND_BY_KEY.
Definition: param.hpp:142
Definition: flat_tree.h:69
Definition: flat_tree.h:90
A node in a doubly-linked channel chain.
Definition: chann.h:122
Param client module — PARAM channel, reactor side.
Definition: param.h:47
Definition: param_proto.h:98
Active query state for a pending QUERY or FIND_BY_KEY request.
Definition: param.h:149
char const * key
Key of the returned node, valid until next query.
Definition: param.h:152
enum asrt_param_err_e error_code
Error code from the server, if any.
Definition: param.h:150
asrt_flat_id node_id
Node ID requested or returned.
Definition: param.h:151
asrt_flat_value_type expected_type
Type filter; NONE means accept any type.
Definition: param.h:155
asrt_flat_id next_sibling
Next sibling ID (0 = none).
Definition: param.h:153
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee ...
Definition: span.h:23