]> Untitled Git - lemmy.git/blob - crates/websocket/src/lib.rs
d501e9611d7ae2f5871abd004860ff87db5d1fb2
[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   GetReplies,
105   GetPersonMentions,
106   MarkPersonMentionAsRead,
107   GetModlog,
108   BanFromCommunity,
109   AddModToCommunity,
110   AddAdmin,
111   BanPerson,
112   Search,
113   ResolveObject,
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   GetSiteMetadata,
129   BlockCommunity,
130   BlockPerson,
131 }
132
133 #[derive(EnumString, ToString, Debug, Clone)]
134 pub enum UserOperationCrud {
135   // Site
136   CreateSite,
137   GetSite,
138   EditSite,
139   // Community
140   CreateCommunity,
141   ListCommunities,
142   GetCommunity,
143   EditCommunity,
144   DeleteCommunity,
145   RemoveCommunity,
146   // Post
147   CreatePost,
148   GetPost,
149   GetPosts,
150   EditPost,
151   DeletePost,
152   RemovePost,
153   // Comment
154   CreateComment,
155   GetComments,
156   EditComment,
157   DeleteComment,
158   RemoveComment,
159   // User
160   Register,
161   GetPersonDetails,
162   DeleteAccount,
163   // Private Message
164   CreatePrivateMessage,
165   GetPrivateMessages,
166   EditPrivateMessage,
167   DeletePrivateMessage,
168 }
169
170 pub trait OperationType {}
171
172 impl OperationType for UserOperationCrud {}
173
174 impl OperationType for UserOperation {}