X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=devel%2Fschemata;h=2405756e43a724ca3f2d2fc576710afc34e8046f;hb=b98e89045649d5cf6e0cc89aa6f8fc8928ef576f;hp=e44da717b36c1dd18eb8e0f73112be9136032ecf;hpb=70dacc1fd984acf1b17daac04a2e019f10a80031;p=notmuch diff --git a/devel/schemata b/devel/schemata index e44da717..2405756e 100644 --- a/devel/schemata +++ b/devel/schemata @@ -1,5 +1,5 @@ This file describes the schemata used for notmuch's structured output -format (currently JSON). +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 @@ -8,6 +8,14 @@ values. An object field marked '?' is optional. |'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 +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 1 of the structured output format. + Common non-terminals -------------------- @@ -36,9 +44,9 @@ thread_node = [ [thread_node*] # children of message ] -# A message (format_part_json) +# A message (format_part_sprinter) message = { - # (format_message_json) + # (format_message_sprinter) id: messageid, match: bool, filename: string, @@ -50,7 +58,7 @@ message = { body?: [part] # omitted if --body=false } -# A MIME part (format_part_json) +# A MIME part (format_part_sprinter) part = { id: int|string, # part id (currently DFS part number) @@ -69,10 +77,17 @@ part = { # A leaf part's body content is optional, but may be included if # it can be correctly encoded as a string. Consumers should use # this in preference to fetching the part content separately. - content?: string + content?: string, + # If a leaf part's body content is not included, the length of + # the encoded content (in bytes) may be given instead. + content-length?: int, + # If a leaf part's body content is not included, its transfer encoding + # may be given. Using this and the encoded content length, it is + # possible for the consumer to estimate the decoded content length. + content-transfer-encoding?: string } -# The headers of a message or part (format_headers_json with reply = FALSE) +# The headers of a message or part (format_headers_sprinter with reply = FALSE) headers = { Subject: string, From: string, @@ -83,10 +98,10 @@ headers = { Date: string } -# Encryption status (format_part_json) +# Encryption status (format_part_sprinter) encstatus = [{status: "good"|"bad"}] -# Signature status (format_part_sigstatus_json) +# Signature status (format_part_sigstatus_sprinter) sigstatus = [signature*] signature = { @@ -140,11 +155,11 @@ reply = { # The headers of the constructed reply reply-headers: reply_headers, - # As in the show format (format_part_json) + # As in the show format (format_part_sprinter) original: message } -# Reply headers (format_headers_json with reply = TRUE) +# Reply headers (format_headers_sprinter with reply = TRUE) reply_headers = { Subject: string, From: string,