Skip to main content

im_core/directory/
dto.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
4pub struct DirectoryResolution {
5    pub input: String,
6    pub did: crate::ids::Did,
7    pub handle: Option<crate::ids::Handle>,
8    pub profile: Option<crate::identity::Profile>,
9    pub warnings: Vec<String>,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13pub enum IdentitySubject {
14    Did(crate::ids::Did),
15    Handle(crate::ids::Handle),
16    Any(String),
17}
18
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
20pub struct PublicProfile {
21    pub subject: IdentitySubject,
22    pub did: crate::ids::Did,
23    pub handle: Option<crate::ids::Handle>,
24    pub profile: crate::identity::Profile,
25    pub warnings: Vec<String>,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
29pub struct HandleLookupResult {
30    pub handle: crate::ids::Handle,
31    pub did: crate::ids::Did,
32    pub user_id: String,
33    pub domain: Option<String>,
34    pub status: Option<String>,
35    pub profile: Option<crate::identity::Profile>,
36    pub warnings: Vec<String>,
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct Contact {
41    pub did: crate::ids::Did,
42    pub handle: Option<crate::ids::Handle>,
43    pub display_name: Option<String>,
44    pub avatar_uri: Option<String>,
45    pub avatar_url: Option<String>,
46    pub profile_uri: Option<String>,
47    pub subject_type: Option<String>,
48    pub relationship: Option<String>,
49    pub followed: bool,
50    pub messaged: bool,
51    pub note: Option<String>,
52    pub last_seen_at: Option<String>,
53}
54
55#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
56pub struct DisplayProfile {
57    pub did: Option<crate::ids::Did>,
58    pub handle: Option<crate::ids::Handle>,
59    pub display_name: Option<String>,
60    pub avatar_uri: Option<String>,
61    pub avatar_url: Option<String>,
62    pub profile_uri: Option<String>,
63    pub subject_type: Option<String>,
64    pub cache_hit: bool,
65    pub warnings: Vec<String>,
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
69pub struct DisplayProfileBatchRequest {
70    pub peers: Vec<crate::ids::PeerRef>,
71}
72
73#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
74pub struct RelationStatus {
75    pub peer: crate::ids::PeerRef,
76    pub did: Option<crate::ids::Did>,
77    pub is_contact: bool,
78    pub followed: bool,
79    pub messaged: bool,
80    pub relationship: Option<String>,
81}
82
83#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
84pub struct SaveContactRequest {
85    pub peer: crate::ids::PeerRef,
86    pub did: Option<crate::ids::Did>,
87    pub handle: Option<crate::ids::Handle>,
88    pub display_name: Option<String>,
89    pub relationship: Option<String>,
90    pub note: Option<String>,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
94pub struct ContactListQuery {
95    pub limit: Option<crate::ids::PageLimit>,
96}
97
98#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
99pub struct FollowRequest {
100    pub peer: crate::ids::PeerRef,
101}
102
103#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
104pub struct UnfollowRequest {
105    pub peer: crate::ids::PeerRef,
106}
107
108#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
109pub struct FollowResult {
110    pub peer: crate::ids::PeerRef,
111    pub did: crate::ids::Did,
112    pub is_friend: bool,
113    pub relation: RelationshipStatus,
114    pub warnings: Vec<String>,
115}
116
117#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
118pub struct UnfollowResult {
119    pub peer: crate::ids::PeerRef,
120    pub did: crate::ids::Did,
121    pub ok: bool,
122    pub relation: RelationshipStatus,
123    pub warnings: Vec<String>,
124}
125
126#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
127pub struct RelationshipStatus {
128    pub peer: crate::ids::PeerRef,
129    pub did: crate::ids::Did,
130    pub is_following: bool,
131    pub is_follower: bool,
132    pub is_friend: bool,
133    pub is_blocked: bool,
134    pub is_blocked_by: bool,
135    pub is_contact: bool,
136    pub messaged: bool,
137    pub relationship: Option<String>,
138    pub warnings: Vec<String>,
139}
140
141#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
142pub struct RelationshipListQuery {
143    pub limit: Option<crate::ids::PageLimit>,
144    pub offset: Option<u32>,
145    pub hydrate_profiles: bool,
146}
147
148#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149pub struct RelationshipListItem {
150    pub did: Option<crate::ids::Did>,
151    pub handle: Option<crate::ids::Handle>,
152    pub profile: Option<crate::identity::Profile>,
153    pub created_at: Option<String>,
154    pub warnings: Vec<String>,
155}