···
(** Implementation of the JMAP Mail extension, as defined in RFC8621 *)
3
+
(** Module for managing JMAP Mail-specific capability URIs *)
4
+
module Capability = struct
5
+
(** Mail capability types *)
8
+
(** Mail capability URI *)
9
+
let mail_uri = "urn:ietf:params:jmap:mail"
11
+
(** Convert mail capability to URI string *)
12
+
let string_of_mail = function
15
+
(** Parse a string to mail capability *)
16
+
let mail_of_string = function
17
+
| s when s = mail_uri -> Some Mail
20
+
(** Submission capability types *)
21
+
type submission = Submission
23
+
(** Submission capability URI *)
24
+
let submission_uri = "urn:ietf:params:jmap:submission"
26
+
(** Convert submission capability to URI string *)
27
+
let string_of_submission = function
28
+
| Submission -> submission_uri
30
+
(** Parse a string to submission capability *)
31
+
let submission_of_string = function
32
+
| s when s = submission_uri -> Some Submission
35
+
(** Vacation response capability types *)
36
+
type vacation_response = VacationResponse
38
+
(** Vacation response capability URI *)
39
+
let vacation_response_uri = "urn:ietf:params:jmap:vacationresponse"
41
+
(** Convert vacation response capability to URI string *)
42
+
let string_of_vacation_response = function
43
+
| VacationResponse -> vacation_response_uri
45
+
(** Parse a string to vacation response capability *)
46
+
let vacation_response_of_string = function
47
+
| s when s = vacation_response_uri -> Some VacationResponse
50
+
(** All mail extension capability types *)
53
+
| Submission of submission
54
+
| VacationResponse of vacation_response
55
+
| Extension of string
57
+
(** Convert capability to URI string *)
58
+
let to_string = function
59
+
| Mail m -> string_of_mail m
60
+
| Submission s -> string_of_submission s
61
+
| VacationResponse v -> string_of_vacation_response v
64
+
(** Parse a string to a capability *)
66
+
match mail_of_string s with
69
+
match submission_of_string s with
70
+
| Some s -> Submission s
72
+
match vacation_response_of_string s with
73
+
| Some v -> VacationResponse v
74
+
| None -> Extension s
76
+
(** Check if a capability is a standard mail capability *)
77
+
let is_standard = function
78
+
| Mail _ | Submission _ | VacationResponse _ -> true
79
+
| Extension _ -> false
81
+
(** Check if a capability string is a standard mail capability *)
82
+
let is_standard_string s =
83
+
match of_string s with
84
+
| Extension _ -> false
87
+
(** Create a list of capability strings *)
88
+
let strings_of_capabilities capabilities =
89
+
List.map to_string capabilities
(** {1 Mail capabilities} *)
(** Capability URI for JMAP Mail*)
9
-
let capability_mail = "urn:ietf:params:jmap:mail"
98
+
let capability_mail = Capability.mail_uri
(** Capability URI for JMAP Submission *)
12
-
let capability_submission = "urn:ietf:params:jmap:submission"
101
+
let capability_submission = Capability.submission_uri
(** Capability URI for JMAP Vacation Response *)
15
-
let capability_vacation_response = "urn:ietf:params:jmap:vacationresponse"
104
+
let capability_vacation_response = Capability.vacation_response_uri
(** {1:mailbox Mailbox objects} *)
···
let get_mailboxes conn ~account_id =
1210
-
using = ["urn:ietf:params:jmap:core"; Types.capability_mail];
1300
+
Jmap.Capability.to_string (Jmap.Capability.Core Core);
1301
+
Capability.to_string (Capability.Mail Mail)
···
let get_mailbox conn ~account_id ~mailbox_id =
1256
-
using = ["urn:ietf:params:jmap:core"; Types.capability_mail];
1349
+
Jmap.Capability.to_string (Jmap.Capability.Core Core);
1350
+
Capability.to_string (Capability.Mail Mail)
···
let get_messages_in_mailbox conn ~account_id ~mailbox_id ?limit () =
(* First query the emails in the mailbox *)
1300
-
using = ["urn:ietf:params:jmap:core"; Types.capability_mail];
1396
+
Jmap.Capability.to_string (Jmap.Capability.Core Core);
1397
+
Capability.to_string (Capability.Mail Mail)
···
(* If we have IDs, fetch the actual email objects *)
if List.length email_ids > 0 then
1335
-
using = ["urn:ietf:params:jmap:core"; Types.capability_mail];
1434
+
Jmap.Capability.to_string (Jmap.Capability.Core Core);
1435
+
Capability.to_string (Capability.Mail Mail)
···
let get_email conn ~account_id ~email_id =
1389
-
using = ["urn:ietf:params:jmap:core"; Types.capability_mail];
1491
+
Jmap.Capability.to_string (Jmap.Capability.Core Core);
1492
+
Capability.to_string (Capability.Mail Mail)