schema compile CHANGE making container implicitely presence
clarify the warning message and, in addition, make the container presence in case of
having when statement.
diff --git a/src/tree_schema_compile.c b/src/tree_schema_compile.c
index 521c59a..e4f8ebd 100644
--- a/src/tree_schema_compile.c
+++ b/src/tree_schema_compile.c
@@ -3384,18 +3384,22 @@
cont->flags |= LYS_PRESENCE;
} else if (cont_p->musts) {
/* container with a must condition */
- LOGWRN(ctx->ctx, "Container \"%s\" changed to presence because it has a \"must\" condition.", cont_p->name);
+ LOGWRN(ctx->ctx, "Container \"%s\" changed to presence because it has a meaning from its \"must\" condition.", cont_p->name);
+ cont->flags |= LYS_PRESENCE;
+ } else if (cont_p->when) {
+ /* container with a when condition */
+ LOGWRN(ctx->ctx, "Container \"%s\" changed to presence because it has a meaning from its \"when\" condition.", cont_p->name);
cont->flags |= LYS_PRESENCE;
} else if (cont_p->parent) {
if (cont_p->parent->nodetype == LYS_CHOICE) {
/* container is an implicit case, so its existence decides the existence of the whole case */
- LOGWRN(ctx->ctx, "Container \"%s\" changed to presence because it is an implicit case of choice \"%s\".",
+ LOGWRN(ctx->ctx, "Container \"%s\" changed to presence because it has a meaning as a case of choice \"%s\".",
cont_p->name, cont_p->parent->name);
cont->flags |= LYS_PRESENCE;
} else if ((cont_p->parent->nodetype == LYS_CASE)
&& (((struct lysp_node_case *)cont_p->parent)->child == node_p) && !cont_p->next) {
/* container is the only node in a case, so its existence decides the existence of the whole case */
- LOGWRN(ctx->ctx, "Container \"%s\" changed to presence because it is the only data node of case \"%s\".",
+ LOGWRN(ctx->ctx, "Container \"%s\" changed to presence because it has a meaning as a case of choice \"%s\".",
cont_p->name, cont_p->parent->name);
cont->flags |= LYS_PRESENCE;
}