]> Untitled Git - lemmy.git/blob - crates/websocket/src/lib.rs
Move routes into separate crate to speed up compilation
[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<Response>(
70   op: &UserOperation,
71   data: &Response,
72 ) -> Result<String, LemmyError>
73 where
74   Response: Serialize,
75 {
76   let response = WebsocketResponse {
77     op: op.to_string(),
78     data,
79   };
80   Ok(serde_json::to_string(&response)?)
81 }
82
83 #[derive(EnumString, ToString, Debug, Clone)]
84 pub enum UserOperation {
85   Login,
86   Register,
87   GetCaptcha,
88   CreateCommunity,
89   CreatePost,
90   ListCommunities,
91   ListCategories,
92   GetPost,
93   GetCommunity,
94   CreateComment,
95   EditComment,
96   DeleteComment,
97   RemoveComment,
98   MarkCommentAsRead,
99   SaveComment,
100   CreateCommentLike,
101   CreateCommentReport,
102   ResolveCommentReport,
103   ListCommentReports,
104   GetPosts,
105   CreatePostLike,
106   EditPost,
107   DeletePost,
108   RemovePost,
109   LockPost,
110   StickyPost,
111   SavePost,
112   CreatePostReport,
113   ResolvePostReport,
114   ListPostReports,
115   GetReportCount,
116   EditCommunity,
117   DeleteCommunity,
118   RemoveCommunity,
119   FollowCommunity,
120   GetFollowedCommunities,
121   GetUserDetails,
122   GetReplies,
123   GetUserMentions,
124   MarkUserMentionAsRead,
125   GetModlog,
126   BanFromCommunity,
127   AddModToCommunity,
128   CreateSite,
129   EditSite,
130   GetSite,
131   AddAdmin,
132   BanUser,
133   Search,
134   MarkAllAsRead,
135   SaveUserSettings,
136   TransferCommunity,
137   TransferSite,
138   DeleteAccount,
139   PasswordReset,
140   PasswordChange,
141   CreatePrivateMessage,
142   EditPrivateMessage,
143   DeletePrivateMessage,
144   MarkPrivateMessageAsRead,
145   GetPrivateMessages,
146   UserJoin,
147   GetComments,
148   GetSiteConfig,
149   SaveSiteConfig,
150   PostJoin,
151   CommunityJoin,
152   ModJoin,
153 }