X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=devel%2Fschemata;h=4e05cdacdf0419718f94065a7c58169ca9138afc;hb=HEAD;hp=6dede7a453d7df9a2e9caf90d32f34950a8e5623;hpb=14c60cf168ac3b0f277188c16e6012b7ebdadde7;p=notmuch diff --git a/devel/schemata b/devel/schemata index 6dede7a4..4e05cdac 100644 --- a/devel/schemata +++ b/devel/schemata @@ -4,9 +4,9 @@ format (currently JSON and S-Expressions). []'s indicate lists. List items can be marked with a '?', meaning they are optional; or a '*', meaning there can be zero or more of that item. {}'s indicate an object that maps from field identifiers to -values. An object field marked '?' is optional. |'s indicate -alternates (e.g., int|string means something can be an int or a -string). +values. An object field marked '?' is optional; one marked with '*' +can repeat (with a different name). |'s indicate alternates (e.g., +int|string means something can be an int or a string). For S-Expression output, lists are printed delimited by () instead of []. Objects are printed as p-lists, i.e. lists where the keys and values @@ -14,7 +14,7 @@ are interleaved. Keys are printed as keywords (symbols preceded by a colon), e.g. (:id "123" :time 54321 :from "foobar"). Null is printed as nil, true as t and false as nil. -This is version 2 of the structured output format. +This is version 5 of the structured output format. Version history --------------- @@ -28,6 +28,17 @@ v2 v3 - Replaced message.filename string with a list of filenames. +- Added part.content-disposition field. + +v4 +- replace signature error integer bitmask with a set of flags for + individual errors. +- (notmuch 0.29) added message.crypto to identify overall message + cryptographic state + +v5 +- sorting support for notmuch show (no change to actual schema, + just new command line argument) Common non-terminals -------------------- @@ -41,6 +52,9 @@ threadid = string # Message ID, sans "id:" messageid = string +# E-mail header name, sans trailing colon, like "Subject" or "In-Reply-To" +header_name = string + notmuch show schema ------------------- @@ -62,15 +76,39 @@ message = { # (format_message_sprinter) id: messageid, match: bool, + excluded: bool, filename: [string*], timestamp: unix_time, # date header as unix time date_relative: string, # user-friendly timestamp tags: [string*], headers: headers, + crypto: crypto, + duplicate: integer, body?: [part] # omitted if --body=false } +# when showing the message, was any or all of it decrypted? +msgdecstatus: "full"|"partial" + +# The overall cryptographic state of the message as a whole: +crypto = { + signed?: { + status: sigstatus, + # was the set of signatures described under encrypted cover? + encrypted: bool, + # which of the headers is covered by sigstatus? + headers: [header_name*] + }, + decrypted?: { + status: msgdecstatus, + # map encrypted headers that differed from the outside headers. + # the value of each item in the map is what that field showed externally + # (maybe null if it was not present in the external headers). + header-mask: { header_name*: string|null } + } +} + # A MIME part (format_part_sprinter) part = { id: int|string, # part id (currently DFS part number) @@ -79,6 +117,7 @@ part = { sigstatus?: sigstatus, content-type: string, + content-disposition?: string, content-id?: string, # if content-type starts with "multipart/": content: [part*], @@ -108,9 +147,11 @@ headers = { Cc?: string, Bcc?: string, Reply-To?: string, - Date: string + Date: string, + extra_header_pair* } +extra_header_pair= (header_name: string) # Encryption status (format_part_sprinter) encstatus = [{status: "good"|"bad"}] @@ -119,16 +160,29 @@ sigstatus = [signature*] signature = { # (signature_status_to_string) - status: "none"|"good"|"bad"|"error"|"unknown", + status: "good"|"bad"|"error"|"unknown", # if status is "good": fingerprint?: string, created?: unix_time, expires?: unix_time, userid?: string + email?: string # if status is not "good": keyid?: string - # if the signature has errors: - errors?: int + errors?: sig_errors +} + +sig_errors = { + key-revoked?: bool, + key-expired?: bool, + sig-expired?: bool, + key-missing?: bool, + alg-unsupported?: bool, + crl-missing?: bool, + crl-too-old?: bool, + bad-policy?: bool, + sys-error?: bool, + tofu-conflict?: bool } notmuch search schema