jmap_filenode_types/backend.rs
1//! Property selector enum and [`jmap_types`] trait impls for [`crate::FileNode`].
2//!
3//! Defined here so `jmap-filenode-server` can use them without violating the
4//! orphan rule (`JmapObject` is foreign; `FileNode` is local to this crate).
5
6use jmap_types::{GetObject, JmapObject, PatchObject, QueryObject, SetObject};
7
8// ---------------------------------------------------------------------------
9// Property selector enum
10// ---------------------------------------------------------------------------
11
12/// Property selector for [`crate::FileNode`] `/get` and `/set`.
13#[derive(Debug, Clone, PartialEq, Eq, Hash)]
14#[non_exhaustive]
15pub enum FileNodeProperty {
16 /// The `id` property (draft-ietf-jmap-filenode-13 §3.1).
17 Id,
18 /// The `parentId` property (draft-ietf-jmap-filenode-13 §3.1).
19 ParentId,
20 /// The `nodeType` property (draft-ietf-jmap-filenode-13 §3.1).
21 NodeType,
22 /// The `blobId` property (draft-ietf-jmap-filenode-13 §3.1).
23 BlobId,
24 /// The `target` property (draft-ietf-jmap-filenode-13 §3.1).
25 Target,
26 /// The `size` property (draft-ietf-jmap-filenode-13 §3.1).
27 Size,
28 /// The `name` property (draft-ietf-jmap-filenode-13 §3.1).
29 Name,
30 /// The `type` property (media type) (draft-ietf-jmap-filenode-13 §3.1).
31 MediaType,
32 /// The `created` property (draft-ietf-jmap-filenode-13 §3.1).
33 Created,
34 /// The `modified` property (draft-ietf-jmap-filenode-13 §3.1).
35 Modified,
36 /// The `accessed` property (draft-ietf-jmap-filenode-13 §3.1).
37 Accessed,
38 /// The `changed` property (draft-ietf-jmap-filenode-13 §3.1).
39 Changed,
40 /// The `executable` property (draft-ietf-jmap-filenode-13 §3.1).
41 Executable,
42 /// The `isSubscribed` property (draft-ietf-jmap-filenode-13 §3.1).
43 IsSubscribed,
44 /// The `myRights` property (draft-ietf-jmap-filenode-13 §3.1).
45 MyRights,
46 /// The `shareWith` property (draft-ietf-jmap-filenode-13 §3.1).
47 ShareWith,
48 /// The `role` property (draft-ietf-jmap-filenode-13 §3.1).
49 Role,
50}
51
52// ---------------------------------------------------------------------------
53// JmapObject / marker trait impls
54// ---------------------------------------------------------------------------
55
56impl JmapObject for crate::FileNode {
57 const TYPE_NAME: &'static str = "FileNode";
58 type Property = FileNodeProperty;
59}
60
61impl GetObject for crate::FileNode {}
62
63impl SetObject for crate::FileNode {
64 type Patch = PatchObject;
65}
66
67impl QueryObject for crate::FileNode {
68 type Filter = crate::FileNodeFilterCondition;
69 type Comparator = serde_json::Value;
70}