Use delim_output to support proper hiding in structures and functions
diff --git a/lens_default.c b/lens_default.c
index fc8b0e4..4348c76 100644
--- a/lens_default.c
+++ b/lens_default.c
@@ -200,24 +200,40 @@
 	}
 }
 
+struct format_argument_data
+{
+	struct value *value;
+	struct value_dict *arguments;
+};
+
+static int
+format_argument_cb(FILE *stream, void *ptr)
+{
+	struct format_argument_data *data = ptr;
+	return format_argument(stream, data->value, data->arguments);
+}
+
 static int
 format_struct(FILE *stream, struct value *value, struct value_dict *arguments)
 {
 	int written = 0;
 	if (acc_fprintf(&written, stream, "{ ") < 0)
 		return -1;
+
+	int need_delim = 0;
 	size_t i;
 	for (i = 0; i < type_struct_size(value->type); ++i) {
-		if (i > 0 && acc_fprintf(&written, stream, ", ") < 0)
-			return -1;
-
 		struct value element;
 		if (value_init_element(&element, value, i) < 0)
 			return -1;
-		int o = format_argument(stream, &element, arguments);
+
+		struct format_argument_data data = { &element, arguments };
+		int o = delim_output(stream, &need_delim,
+				     format_argument_cb, &data);
 		value_destroy(&element);
 		if (o < 0)
 			return -1;
+
 		written += o;
 	}
 	if (acc_fprintf(&written, stream, " }") < 0)