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