validation UPDATE support for specific eapptag and message
Fixes #1705
diff --git a/src/validation.c b/src/validation.c
index 6063c15..d2ceff7 100644
--- a/src/validation.c
+++ b/src/validation.c
@@ -838,7 +838,7 @@
if (!disabled) {
/* node instance not found */
if (snode->nodetype == LYS_CHOICE) {
- LOGVAL(snode->module->ctx, LY_VCODE_NOMAND_CHOIC, snode->name);
+ LOGVAL_APPTAG(snode->module->ctx, "missing-choice", LY_VCODE_NOMAND_CHOIC, snode->name);
} else {
LOGVAL(snode->module->ctx, LY_VCODE_NOMAND, snode->name);
}
@@ -898,11 +898,11 @@
}
if (!disabled) {
- LOGVAL(snode->module->ctx, LY_VCODE_NOMIN, snode->name);
+ LOGVAL_APPTAG(snode->module->ctx, "too-few-elements", LY_VCODE_NOMIN, snode->name);
goto failure;
}
} else if (max && (count > max)) {
- LOGVAL(snode->module->ctx, LY_VCODE_NOMAX, snode->name);
+ LOGVAL_APPTAG(snode->module->ctx, "too-many-elements", LY_VCODE_NOMAX, snode->name);
goto failure;
}
@@ -1037,7 +1037,7 @@
ptr += strlen(ptr);
}
LOG_LOCSET(NULL, second, NULL, NULL);
- LOGVAL(ctx, LY_VCODE_NOUNIQ, uniq_str, path1, path2);
+ LOGVAL_APPTAG(ctx, "data-not-unique", LY_VCODE_NOUNIQ, uniq_str, path1, path2);
LOG_LOCBACK(0, 1, 0, 0);
free(path1);
@@ -1300,6 +1300,7 @@
struct lysc_must *musts;
const struct lyd_node *tree;
const struct lysc_node *schema;
+ const char *emsg, *eapptag;
LY_ARRAY_COUNT_TYPE u;
assert((int_opts & (LYD_INTOPT_RPC | LYD_INTOPT_REPLY)) != (LYD_INTOPT_RPC | LYD_INTOPT_REPLY));
@@ -1341,7 +1342,14 @@
/* check the result */
lyxp_set_cast(&xp_set, LYXP_SET_BOOLEAN);
if (!xp_set.val.bln) {
- LOGVAL(LYD_CTX(node), LY_VCODE_NOMUST, musts[u].cond->expr);
+ /* use specific error information */
+ emsg = musts[u].emsg;
+ eapptag = musts[u].eapptag ? musts[u].eapptag : "must-violation";
+ if (emsg) {
+ LOGVAL_APPTAG(LYD_CTX(node), eapptag, LYVE_DATA, "%s", emsg);
+ } else {
+ LOGVAL_APPTAG(LYD_CTX(node), eapptag, LY_VCODE_NOMUST, musts[u].cond->expr);
+ }
return LY_EVALID;
}
}