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