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