]> Untitled Git - lemmy.git/blob - crates/websocket/src/lib.rs
Rewrite delete activities (#1699)
[lemmy.git] / crates / websocket / src / lib.rs
1 #[macro_use]
2 extern crate strum_macros;
3
4 use crate::chat_server::ChatServer;
5 use actix::Addr;
6 use background_jobs::QueueHandle;
7 use lemmy_db_queries::DbPool;
8 use lemmy_utils::LemmyError;
9 use reqwest::Client;
10 use serde::Serialize;
11
12 pub mod chat_server;
13 pub mod handlers;
14 pub mod messages;
15 pub mod routes;
16 pub mod send;
17
18 pub struct LemmyContext {
19   pub pool: DbPool,
20   pub chat_server: Addr<ChatServer>,
21   pub client: Client,
22   pub activity_queue: QueueHandle,
23 }
24
25 impl LemmyContext {
26   pub fn create(
27     pool: DbPool,
28     chat_server: Addr<ChatServer>,
29     client: Client,
30     activity_queue: QueueHandle,
31   ) -> LemmyContext {
32     LemmyContext {
33       pool,
34       chat_server,
35       client,
36       activity_queue,
37     }
38   }
39   pub fn pool(&self) -> &DbPool {
40     &self.pool
41   }
42   pub fn chat_server(&self) -> &Addr<ChatServer> {
43     &self.chat_server
44   }
45   pub fn client(&self) -> &Client {
46     &self.client
47   }
48   pub fn activity_queue(&self) -> &QueueHandle {
49     &self.activity_queue
50   }
51 }
52
53 impl Clone for LemmyContext {
54   fn clone(&self) -> Self {
55     LemmyContext {
56       pool: self.pool.clone(),
57       chat_server: self.chat_server.clone(),
58       client: self.client.clone(),
59       activity_queue: self.activity_queue.clone(),
60     }
61   }
62 }
63
64 #[derive(Serialize)]
65 struct WebsocketResponse<T> {
66   op: String,
67   data: T,
68 }
69
70 pub fn serialize_websocket_message<OP, Response>(
71   op: &OP,
72   data: &Response,
73 ) -> Result<String, LemmyError>
74 where
75   Response: Serialize,
76   OP: ToString,
77 {
78   let response = WebsocketResponse {
79     op: op.to_string(),
80     data,
81   };
82   Ok(serde_json::to_string(&response)?)
83 }
84
85 #[derive(EnumString, ToString, Debug, Clone)]
86 pub enum UserOperation {
87   Login,
88   GetCaptcha,
89   MarkCommentAsRead,
90   SaveComment,
91   CreateCommentLike,
92   CreateCommentReport,
93   ResolveCommentReport,
94   ListCommentReports,
95   CreatePostLike,
96   LockPost,
97   StickyPost,
98   SavePost,
99   CreatePostReport,
100   ResolvePostReport,
101   ListPostReports,
102   GetReportCount,
103   FollowCommunity,
104   GetFollowedCommunities,
105   GetReplies,
106   GetPersonMentions,
107   MarkPersonMentionAsRead,
108   GetModlog,
109   BanFromCommunity,
110   AddModToCommunity,
111   AddAdmin,
112   BanPerson,
113   Search,
114   MarkAllAsRead,
115   SaveUserSettings,
116   TransferCommunity,
117   TransferSite,
118   PasswordReset,
119   PasswordChange,
120   MarkPrivateMessageAsRead,
121   UserJoin,
122   GetSiteConfig,
123   SaveSiteConfig,
124   PostJoin,
125   CommunityJoin,
126   ModJoin,
127   ChangePassword,
128 }
129
130 #[derive(EnumString, ToString, Debug, Clone)]
131 pub enum UserOperationCrud {
132   // Site
133   CreateSite,
134   GetSite,
135   EditSite,
136   // Community
137   CreateCommunity,
138   ListCommunities,
139   GetCommunity,
140   EditCommunity,
141   DeleteCommunity,
142   RemoveCommunity,
143   // Post
144   CreatePost,
145   GetPost,
146   GetPosts,
147   EditPost,
148   DeletePost,
149   RemovePost,
150   // Comment
151   CreateComment,
152   GetComments,
153   EditComment,
154   DeleteComment,
155   RemoveComment,
156   // User
157   Register,
158   GetPersonDetails,
159   DeleteAccount,
160   // Private Message
161   CreatePrivateMessage,
162   GetPrivateMessages,
163   EditPrivateMessage,
164   DeletePrivateMessage,
165 }
166
167 pub trait OperationType {}
168
169 impl OperationType for UserOperationCrud {}
170
171 impl OperationType for UserOperation {}