summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/property_replacer.html4
-rw-r--r--template.c5
-rw-r--r--template.h1
3 files changed, 10 insertions, 0 deletions
diff --git a/doc/property_replacer.html b/doc/property_replacer.html
index 943c4f73..217b6dc0 100644
--- a/doc/property_replacer.html
+++ b/doc/property_replacer.html
@@ -714,6 +714,10 @@ Useful for secure pathname generation (with dynafiles).
Useful for secure pathname generation (with dynafiles).
</td>
</tr>
+<tr>
+<td><b>optional-field</b></td>
+<td>In templates that are used for building field lists (in particular, ommongodb), completely remove this field if the corresponding property is not present. Currently implemented only for the <b>$!&lt;name&gt;</b> properties.</td>
+</tr>
</tbody>
</table>
<p>To use multiple options, simply place them one after each other with a comma delmimiting
diff --git a/template.c b/template.c
index 80427350..bd622285 100644
--- a/template.c
+++ b/template.c
@@ -663,6 +663,8 @@ static void doOptions(unsigned char **pp, struct templateEntry *pTpe)
} else {
pTpe->data.field.options.bJSONf = 1;
}
+ } else if(!strcmp((char*)Buf, "optional-field")) {
+ pTpe->data.field.options.bOptionalField = 1;
} else {
dbgprintf("Invalid field option '%s' specified - ignored.\n", Buf);
}
@@ -1988,6 +1990,9 @@ void tplPrintList(rsconf_t *conf)
if(pTpe->data.field.options.bJSONf) {
dbgprintf("[format as JSON field] ");
}
+ if(pTpe->data.field.options.bOptionalField) {
+ dbgprintf("[optional field - skip in field template if not present] ");
+ }
if(pTpe->data.field.options.bDropLastLF) {
dbgprintf("[drop last LF in msg] ");
}
diff --git a/template.h b/template.h
index a4b5658e..0d083216 100644
--- a/template.h
+++ b/template.h
@@ -115,6 +115,7 @@ struct templateEntry {
unsigned bCSV: 1; /* format field in CSV (RFC 4180) format */
unsigned bJSON: 1; /* format field JSON escaped */
unsigned bJSONf: 1; /* format field JSON *field* (n/v pair) */
+ unsigned bOptionalField: 1; /* optional field - skip in field template if not present */
} options; /* options as bit fields */
} field;
} data;