+ return terms;
+}
+
+/* The assertion is to ensure that 'type' is a derivative of
+ * notmuch_terms_t in that it contains a notmuch_terms_t as its first
+ * member. We do this by name of 'terms' as opposed to type, because
+ * that's as clever as I've been so far. */
+#define _notmuch_terms_create_type(ctx, doc, prefix_name, type) \
+ (COMPILE_TIME_ASSERT(offsetof(type, terms) == 0), \
+ (type *) _notmuch_terms_create (ctx, doc, prefix_name))
+
+notmuch_tags_t *
+notmuch_message_get_tags (notmuch_message_t *message)
+{
+ return _notmuch_terms_create_type (message, message->doc, "tag",
+ notmuch_tags_t);