]> git.notmuchmail.org Git - notmuch/blob - devel/schemata
Update devel/schemata for --entire-thread=false
[notmuch] / devel / schemata
1 This file describes the schemata used for notmuch's structured output
2 format (currently JSON).
3
4 []'s indicate lists.  List items can be marked with a '?', meaning
5 they are optional; or a '*', meaning there can be zero or more of that
6 item.  {}'s indicate an object that maps from field identifiers to
7 values.  An object field marked '?' is optional.  |'s indicate
8 alternates (e.g., int|string means something can be an int or a
9 string).
10
11 Common non-terminals
12 --------------------
13
14 # Number of seconds since the Epoch
15 unix_time = int
16
17 # Thread ID, sans "thread:"
18 threadid = string
19
20 # Message ID, sans "id:"
21 messageid = string
22
23 notmuch show schema
24 -------------------
25
26 # A top-level set of threads (do_show)
27 # Returned by notmuch show without a --part argument
28 thread_set = [thread*]
29
30 # Top-level messages in a thread (show_messages)
31 thread = [thread_node*]
32
33 # A message and its replies (show_messages)
34 thread_node = [
35     message?,                 # null if not matched and not --entire-thread
36     [thread_node*]            # children of message
37 ]
38
39 # A message (format_part_json)
40 message = {
41     # (format_message_json)
42     id:             messageid,
43     match:          bool,
44     filename:       string,
45     timestamp:      unix_time, # date header as unix time
46     date_relative:  string,   # user-friendly timestamp
47     tags:           [string*],
48
49     headers:        headers,
50     body:           [part]
51 }
52
53 # A MIME part (format_part_json)
54 part = {
55     id:             int|string, # part id (currently DFS part number)
56
57     encstatus?:     encstatus,
58     sigstatus?:     sigstatus,
59
60     content-type:   string,
61     content-id?:    string,
62     # if content-type starts with "multipart/":
63     content:        [part*],
64     # if content-type is "message/rfc822":
65     content:        [{headers: headers, body: [part]}],
66     # otherwise (leaf parts):
67     filename?:      string,
68     content-charset?: string,
69     # A leaf part's body content is optional, but may be included if
70     # it can be correctly encoded as a string.  Consumers should use
71     # this in preference to fetching the part content separately.
72     content?:       string
73 }
74
75 # The headers of a message or part (format_headers_json with reply = FALSE)
76 headers = {
77     Subject:        string,
78     From:           string,
79     To?:            string,
80     Cc?:            string,
81     Bcc?:           string,
82     Date:           string
83 }
84
85 # Encryption status (format_part_json)
86 encstatus = [{status: "good"|"bad"}]
87
88 # Signature status (format_part_sigstatus_json)
89 sigstatus = [signature*]
90
91 signature = {
92     # (signature_status_to_string)
93     status:         "none"|"good"|"bad"|"error"|"unknown",
94     # if status is "good":
95     fingerprint?:   string,
96     created?:       unix_time,
97     expires?:       unix_time,
98     userid?:        string
99     # if status is not "good":
100     keyid?:         string
101     # if the signature has errors:
102     errors?:        int
103 }
104
105 notmuch search schema
106 ---------------------
107
108 # --output=summary
109 summary = [thread*]
110
111 # --output=threads
112 threads = [threadid*]
113
114 # --output=messages
115 messages = [messageid*]
116
117 # --output=files
118 files = [string*]
119
120 # --output=tags
121 tags = [string*]
122
123 thread = {
124     thread:         threadid,
125     timestamp:      unix_time,
126     date_relative:  string,   # user-friendly timestamp
127     matched:        int,      # number of matched messages
128     total:          int,      # total messages in thread
129     authors:        string,   # comma-separated names with | between
130                               # matched and unmatched
131     subject:        string
132 }
133
134 notmuch reply schema
135 --------------------
136
137 reply = {
138     # The headers of the constructed reply
139     reply-headers: reply_headers,
140
141     # As in the show format (format_part_json)
142     original: message
143 }
144
145 # Reply headers (format_headers_json with reply = TRUE)
146 reply_headers = {
147     Subject:        string,
148     From:           string,
149     To?:            string,
150     Cc?:            string,
151     Bcc?:           string,
152     In-reply-to:    string,
153     References:     string
154 }