72 const amxc_var_t* value) {
75 amxc_var_init(&def_val);
76 amxc_var_copy(&def_val, data);
81 if(amxc_var_type_of(data) == AMXC_VAR_ID_CSTRING) {
84 data = ref_value == NULL ? &def_val : ref_value;
90 int64_t min = amxc_var_dyncast(int64_t, data);
91 char* text = amxc_var_dyncast(cstring_t, value);
92 int64_t length = text == NULL ? 0 : strlen(text);
99 amxc_var_compare(data, value, &result);
105 amxc_var_clean(&def_val);
111 const amxc_var_t* value) {
114 amxc_var_init(&def_val);
115 amxc_var_copy(&def_val, data);
120 if(amxc_var_type_of(data) == AMXC_VAR_ID_CSTRING) {
123 data = ref_value == NULL ? data : ref_value;
129 int64_t max = amxc_var_dyncast(int64_t, data);
130 char* text = amxc_var_dyncast(cstring_t, value);
131 int64_t length = text == NULL ? 0 : strlen(text);
138 amxc_var_compare(data, value, &result);
144 amxc_var_clean(&def_val);
148 static bool is_value_in(amxc_var_t* value,
const amxc_llist_t* values) {
152 if((amxc_var_type_of(value) == AMXC_VAR_ID_SSV_STRING) ||
153 (amxc_var_type_of(value) == AMXC_VAR_ID_CSV_STRING)) {
154 amxc_var_cast(value, AMXC_VAR_ID_LIST);
156 amxc_var_for_each(v, value) {
163 amxc_llist_for_each(it, values) {
164 amxc_var_t* check = amxc_var_from_llist_it(it);
165 amxc_var_compare(value, check, &result);
177 char* v = amxc_var_dyncast(cstring_t, value);
178 bool retval = (v == NULL || *v == 0);
193 amxc_var_t* ref_value = NULL;
195 char* full_ref = amxc_var_dyncast(cstring_t, ref);
196 int ref_len = strlen(full_ref);
197 char*
object = full_ref;
200 for(
int i = ref_len; i >= 0; i--) {
201 if(full_ref[i] ==
'.') {
203 param = full_ref + i + 1;
208 when_str_empty(param, exit);
213 if(
object[0] ==
'.') {
220 when_null(ref_param, exit);
221 ref_value = &ref_param->
value;
231 const amxc_var_t*
const args,
232 UNUSED amxc_var_t*
const retval,
237 amxc_var_init(&temp);
238 when_null(param, exit);
243 when_true_status((args == NULL ||
244 amxc_var_type_of(args) == AMXC_VAR_ID_NULL),
251 amxc_var_type_of(¶m->
value)),
258 amxc_var_clean(&temp);
265 const amxc_var_t*
const args,
266 amxc_var_t*
const retval,
269 amxc_var_t* data = (amxc_var_t*) priv;
270 amxc_var_t* min_var = NULL;
271 amxc_var_t* max_var = NULL;
273 if(amxc_var_type_of(data) == AMXC_VAR_ID_HTABLE) {
274 min_var = amxc_var_get_key(data,
"min", AMXC_VAR_FLAG_DEFAULT);
275 max_var = amxc_var_get_key(data,
"max", AMXC_VAR_FLAG_DEFAULT);
276 }
else if(amxc_var_type_of(data) == AMXC_VAR_ID_LIST) {
277 min_var = amxc_var_get_path(data,
"0", AMXC_VAR_FLAG_DEFAULT);
278 max_var = amxc_var_get_path(data,
"1", AMXC_VAR_FLAG_DEFAULT);
288 when_failed(
status, exit);
293 when_failed(
status, exit);
296 when_failed(
status, exit);
305 const amxc_var_t*
const args,
306 amxc_var_t*
const retval,
309 amxc_var_t* data = (amxc_var_t*) priv;
310 const char* name =
"check_minimum";
315 if((amxc_var_type_of(¶m->
value) == AMXC_VAR_ID_CSTRING) ||
316 (amxc_var_type_of(¶m->
value) == AMXC_VAR_ID_CSV_STRING) ||
317 (amxc_var_type_of(¶m->
value) == AMXC_VAR_ID_SSV_STRING)) {
318 name =
"check_minimum_length";
324 when_failed(
status, exit);
329 when_failed(
status, exit);
338 const amxc_var_t*
const args,
339 amxc_var_t*
const retval,
342 amxc_var_t* data = (amxc_var_t*) priv;
343 const char* name =
"check_maximum";
348 if((amxc_var_type_of(¶m->
value) == AMXC_VAR_ID_CSTRING) ||
349 (amxc_var_type_of(¶m->
value) == AMXC_VAR_ID_CSV_STRING) ||
350 (amxc_var_type_of(¶m->
value) == AMXC_VAR_ID_SSV_STRING)) {
351 name =
"check_maximum_length";
358 when_failed(
status, exit);
363 when_failed(
status, exit);
372 const amxc_var_t*
const args,
373 amxc_var_t*
const retval,
376 amxc_var_t* data = (amxc_var_t*) priv;
377 const amxc_llist_t* values = NULL;
378 amxc_var_t check_value;
380 amxc_var_init(&check_value);
381 when_true_status(amxc_var_type_of(data) != AMXC_VAR_ID_LIST,
389 when_failed(
status, exit);
394 values = amxc_var_constcast(amxc_llist_t, data);
395 when_false_status(
is_value_in(&check_value, values),
400 amxc_var_clean(&check_value);
407 const amxc_var_t*
const args,
408 amxc_var_t*
const retval,
411 amxc_var_t* data = (amxc_var_t*) priv;
412 amxc_var_t* ref_value = NULL;
413 amxc_llist_t* values = NULL;
414 amxc_var_t check_value;
416 amxc_var_init(&check_value);
417 when_true_status(amxc_var_type_of(data) != AMXC_VAR_ID_CSTRING,
425 when_failed(
status, exit);
430 when_true_status(ref_value == NULL &&
437 values = amxc_var_dyncast(amxc_llist_t, ref_value);
438 when_false_status(
is_value_in(&check_value, values),
443 amxc_var_clean(&check_value);
444 amxc_llist_delete(&values, variant_list_it_free);
449 const amxc_var_t*
const value) {
452 when_null(param, exit);
Ambiorix Data Model Default actions header file.
static bool is_string_empty(const amxc_var_t *value)
static bool is_value_in(amxc_var_t *value, const amxc_llist_t *values)
amxd_status_t amxd_param_validate(amxd_param_t *const param, const amxc_var_t *const value)
static bool is_key_in_template(const amxd_object_t *object, const amxd_param_t *param)
amxd_status_t amxd_action_param_validate(UNUSED amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, UNUSED amxc_var_t *const retval, UNUSED void *priv)
static amxd_status_t amxd_param_check_minimum(amxd_param_t *param, amxc_var_t *data, const amxc_var_t *value)
amxc_var_t * amxd_resolve_param_ref(amxd_object_t *obj, amxc_var_t *ref)
static amxd_status_t amxd_param_check_maximum(amxd_param_t *param, amxc_var_t *data, const amxc_var_t *value)
#define when_failed_status(x, l, c)
amxd_status_t amxd_action_describe_action(amxd_action_t reason, amxc_var_t *const retval, const char *description, void *priv)
Ambiorix Data Model API header file.
amxd_object_t * amxd_dm_findf(amxd_dm_t *const dm, const char *abs_path,...) __attribute__((format(printf
amxd_status_t amxd_dm_invoke_action(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Ambiorix Data Model API header file.
bool amxd_param_is_attr_set(const amxd_param_t *const param, const amxd_pattr_id_t attr)
static uint32_t amxd_param_get_type(const amxd_param_t *const param)
amxd_object_t * amxd_param_get_owner(const amxd_param_t *const param)
Ambiorix path API header file.
enum _amxd_action amxd_action_t
enum _amxd_status amxd_status_t
@ amxd_status_parameter_not_found
@ amxd_status_function_not_implemented
@ amxd_status_invalid_type
@ amxd_status_unknown_error
@ amxd_status_invalid_value
amxd_object_t * amxd_object_findf(amxd_object_t *object, const char *rel_path,...) __attribute__((format(printf
Find an object in the data model tree, starting from an object.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
amxd_status_t amxd_action_param_check_range(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default check range parameter validate action implementation.
amxd_status_t amxd_action_param_check_is_in(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default check is in parameter validate action implementation.
amxd_status_t amxd_action_param_check_enum(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default check enum parameter validate action implementation.
amxd_status_t amxd_action_param_check_maximum(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default check maximum parameter validate action implementation.
amxd_status_t amxd_action_param_check_minimum(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default check minimum parameter validate action implementation.
static amxd_status_t status