asrt
Automated System Runtime Testing library
Loading...
Searching...
No Matches
param.h
1
11#ifndef ASRT_PARAM_H
12#define ASRT_PARAM_H
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18#include "../asrtl/chann.h"
19#include "../asrtl/flat_tree.h"
20#include "../asrtl/param_proto.h"
21
22enum asrt_param_client_state
23{
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,
29};
30
47{
48 struct asrt_node node;
49 asrt_flat_id root_id;
50 int ready;
51
52 uint8_t* cache_buf;
53 uint32_t cache_capacity;
54 uint32_t cache_len; // valid bytes (includes trailing 4-byte next_sib)
55 asrt_flat_id cache_next_sibling; // trailing next_sibling_id from last RESPONSE
56
57 struct asrt_param_query* pending_query;
58
59 uint32_t timeout;
60
61 enum asrt_param_client_state state;
62
63 union
64 {
65 asrt_flat_id root_id;
66 struct
67 {
68 uint8_t error_code;
69 asrt_flat_id node_id;
70 } error;
71 } state_data;
72
73 struct asrt_u8d5msg ready_ack_msg;
74 struct asrt_u8d5msg query_msg;
75 struct asrt_param_find_by_key_msg find_by_key_msg;
76};
77
81enum asrt_status asrt_param_client_init(
82 struct asrt_param_client* client,
83 struct asrt_node* prev,
84 struct asrt_span msg_buffer,
85 uint32_t timeout );
86
88asrt_flat_id asrt_param_client_root_id( struct asrt_param_client const* client );
89
90
92typedef void (
93 *asrt_param_u32_cb )( struct asrt_param_client*, struct asrt_param_query*, uint32_t val );
95typedef void (
96 *asrt_param_i32_cb )( struct asrt_param_client*, struct asrt_param_query*, int32_t val );
98typedef void (
99 *asrt_param_str_cb )( struct asrt_param_client*, struct asrt_param_query*, char const* val );
101typedef void (
102 *asrt_param_float_cb )( struct asrt_param_client*, struct asrt_param_query*, float val );
104typedef void (
105 *asrt_param_bool_cb )( struct asrt_param_client*, struct asrt_param_query*, uint32_t val );
107typedef void ( *asrt_param_obj_cb )(
108 struct asrt_param_client*,
109 struct asrt_param_query*,
110 struct asrt_flat_child_list val );
112typedef void ( *asrt_param_arr_cb )(
113 struct asrt_param_client*,
114 struct asrt_param_query*,
115 struct asrt_flat_child_list val );
117typedef void ( *asrt_param_any_cb )(
118 struct asrt_param_client*,
119 struct asrt_param_query*,
120 struct asrt_flat_value val );
121
123{
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;
132};
133
149{
150 enum asrt_param_err_e error_code;
151 asrt_flat_id node_id;
152 char const* key;
153 asrt_flat_id next_sibling;
154
155 asrt_flat_value_type expected_type;
156 union asrt_param_cb cb;
157 void* cb_ptr;
158
159 uint32_t start;
160};
161
164enum asrt_status asrt_param_client_query(
165 struct asrt_param_query* query,
166 struct asrt_param_client* client,
167 asrt_flat_id node_id,
168 char const* key );
169
171static inline int asrt_param_query_pending( struct asrt_param_client const* client )
172{
173 return client->pending_query != NULL;
174}
175
176// Typed query helpers — set expected_type + cb + cb_ptr, then submit
177static inline enum asrt_status asrt_param_client_fetch_any(
178 struct asrt_param_query* query,
179 struct asrt_param_client* client,
180 asrt_flat_id node_id,
181 asrt_param_any_cb cb,
182 void* cb_ptr )
183{
184 query->expected_type = ASRT_FLAT_STYPE_NONE;
185 query->cb.any = cb;
186 query->cb_ptr = cb_ptr;
187 return asrt_param_client_query( query, client, node_id, NULL );
188}
189
190static inline enum asrt_status asrt_param_client_fetch_u32(
191 struct asrt_param_query* query,
192 struct asrt_param_client* client,
193 asrt_flat_id node_id,
194 asrt_param_u32_cb cb,
195 void* cb_ptr )
196{
197 query->expected_type = ASRT_FLAT_STYPE_U32;
198 query->cb.u32 = cb;
199 query->cb_ptr = cb_ptr;
200 return asrt_param_client_query( query, client, node_id, NULL );
201}
202
203static inline enum asrt_status asrt_param_client_fetch_i32(
204 struct asrt_param_query* query,
205 struct asrt_param_client* client,
206 asrt_flat_id node_id,
207 asrt_param_i32_cb cb,
208 void* cb_ptr )
209{
210 query->expected_type = ASRT_FLAT_STYPE_I32;
211 query->cb.i32 = cb;
212 query->cb_ptr = cb_ptr;
213 return asrt_param_client_query( query, client, node_id, NULL );
214}
215
216static inline enum asrt_status asrt_param_client_fetch_str(
217 struct asrt_param_query* query,
218 struct asrt_param_client* client,
219 asrt_flat_id node_id,
220 asrt_param_str_cb cb,
221 void* cb_ptr )
222{
223 query->expected_type = ASRT_FLAT_STYPE_STR;
224 query->cb.str = cb;
225 query->cb_ptr = cb_ptr;
226 return asrt_param_client_query( query, client, node_id, NULL );
227}
228
229static inline enum asrt_status asrt_param_client_fetch_float(
230 struct asrt_param_query* query,
231 struct asrt_param_client* client,
232 asrt_flat_id node_id,
233 asrt_param_float_cb cb,
234 void* cb_ptr )
235{
236 query->expected_type = ASRT_FLAT_STYPE_FLOAT;
237 query->cb.flt = cb;
238 query->cb_ptr = cb_ptr;
239 return asrt_param_client_query( query, client, node_id, NULL );
240}
241
242static inline enum asrt_status asrt_param_client_fetch_bool(
243 struct asrt_param_query* query,
244 struct asrt_param_client* client,
245 asrt_flat_id node_id,
246 asrt_param_bool_cb cb,
247 void* cb_ptr )
248{
249 query->expected_type = ASRT_FLAT_STYPE_BOOL;
250 query->cb.bln = cb;
251 query->cb_ptr = cb_ptr;
252 return asrt_param_client_query( query, client, node_id, NULL );
253}
254
255static inline enum asrt_status asrt_param_client_fetch_obj(
256 struct asrt_param_query* query,
257 struct asrt_param_client* client,
258 asrt_flat_id node_id,
259 asrt_param_obj_cb cb,
260 void* cb_ptr )
261{
262 query->expected_type = ASRT_FLAT_CTYPE_OBJECT;
263 query->cb.obj = cb;
264 query->cb_ptr = cb_ptr;
265 return asrt_param_client_query( query, client, node_id, NULL );
266}
267
268static inline enum asrt_status asrt_param_client_fetch_arr(
269 struct asrt_param_query* query,
270 struct asrt_param_client* client,
271 asrt_flat_id node_id,
272 asrt_param_arr_cb cb,
273 void* cb_ptr )
274{
275 query->expected_type = ASRT_FLAT_CTYPE_ARRAY;
276 query->cb.arr = cb;
277 query->cb_ptr = cb_ptr;
278 return asrt_param_client_query( query, client, node_id, NULL );
279}
280
281// Typed find helpers — set expected_type + cb + cb_ptr, then submit find
282static inline enum asrt_status asrt_param_client_find_any(
283 struct asrt_param_query* query,
284 struct asrt_param_client* client,
285 asrt_flat_id parent_id,
286 char const* key,
287 asrt_param_any_cb cb,
288 void* cb_ptr )
289{
290 query->expected_type = ASRT_FLAT_STYPE_NONE;
291 query->cb.any = cb;
292 query->cb_ptr = cb_ptr;
293 return asrt_param_client_query( query, client, parent_id, key );
294}
295
296static inline enum asrt_status asrt_param_client_find_u32(
297 struct asrt_param_query* query,
298 struct asrt_param_client* client,
299 asrt_flat_id parent_id,
300 char const* key,
301 asrt_param_u32_cb cb,
302 void* cb_ptr )
303{
304 query->expected_type = ASRT_FLAT_STYPE_U32;
305 query->cb.u32 = cb;
306 query->cb_ptr = cb_ptr;
307 return asrt_param_client_query( query, client, parent_id, key );
308}
309
310static inline enum asrt_status asrt_param_client_find_i32(
311 struct asrt_param_query* query,
312 struct asrt_param_client* client,
313 asrt_flat_id parent_id,
314 char const* key,
315 asrt_param_i32_cb cb,
316 void* cb_ptr )
317{
318 query->expected_type = ASRT_FLAT_STYPE_I32;
319 query->cb.i32 = cb;
320 query->cb_ptr = cb_ptr;
321 return asrt_param_client_query( query, client, parent_id, key );
322}
323
324static inline enum asrt_status asrt_param_client_find_str(
325 struct asrt_param_query* query,
326 struct asrt_param_client* client,
327 asrt_flat_id parent_id,
328 char const* key,
329 asrt_param_str_cb cb,
330 void* cb_ptr )
331{
332 query->expected_type = ASRT_FLAT_STYPE_STR;
333 query->cb.str = cb;
334 query->cb_ptr = cb_ptr;
335 return asrt_param_client_query( query, client, parent_id, key );
336}
337
338static inline enum asrt_status asrt_param_client_find_float(
339 struct asrt_param_query* query,
340 struct asrt_param_client* client,
341 asrt_flat_id parent_id,
342 char const* key,
343 asrt_param_float_cb cb,
344 void* cb_ptr )
345{
346 query->expected_type = ASRT_FLAT_STYPE_FLOAT;
347 query->cb.flt = cb;
348 query->cb_ptr = cb_ptr;
349 return asrt_param_client_query( query, client, parent_id, key );
350}
351
352static inline enum asrt_status asrt_param_client_find_bool(
353 struct asrt_param_query* query,
354 struct asrt_param_client* client,
355 asrt_flat_id parent_id,
356 char const* key,
357 asrt_param_bool_cb cb,
358 void* cb_ptr )
359{
360 query->expected_type = ASRT_FLAT_STYPE_BOOL;
361 query->cb.bln = cb;
362 query->cb_ptr = cb_ptr;
363 return asrt_param_client_query( query, client, parent_id, key );
364}
365
366static inline enum asrt_status asrt_param_client_find_obj(
367 struct asrt_param_query* query,
368 struct asrt_param_client* client,
369 asrt_flat_id parent_id,
370 char const* key,
371 asrt_param_obj_cb cb,
372 void* cb_ptr )
373{
374 query->expected_type = ASRT_FLAT_CTYPE_OBJECT;
375 query->cb.obj = cb;
376 query->cb_ptr = cb_ptr;
377 return asrt_param_client_query( query, client, parent_id, key );
378}
379
380static inline enum asrt_status asrt_param_client_find_arr(
381 struct asrt_param_query* query,
382 struct asrt_param_client* client,
383 asrt_flat_id parent_id,
384 char const* key,
385 asrt_param_arr_cb cb,
386 void* cb_ptr )
387{
388 query->expected_type = ASRT_FLAT_CTYPE_ARRAY;
389 query->cb.arr = cb;
390 query->cb_ptr = cb_ptr;
391 return asrt_param_client_query( query, client, parent_id, key );
392}
393
394void asrt_param_client_deinit( struct asrt_param_client* client );
395
396#ifdef __cplusplus
397}
398#endif
399
400#endif // ASRT_PARAM_H
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
Definition: chann.h:206
Definition: param.h:123