]> Untitled Git - lemmy.git/blob - crates/websocket/src/lib.rs
Merge pull request #1328 from LemmyNet/move_views_to_diesel
[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
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   CreateCommentReport,
101   ResolveCommentReport,
102   ListCommentReports,
103   GetPosts,
104   CreatePostLike,
105   EditPost,
106   DeletePost,
107   RemovePost,
108   LockPost,
109   StickyPost,
110   SavePost,
111   CreatePostReport,
112   ResolvePostReport,
113   ListPostReports,
114   GetReportCount,
115   EditCommunity,
116   DeleteCommunity,
117   RemoveCommunity,
118   FollowCommunity,
119   GetFollowedCommunities,
120   GetUserDetails,
121   GetReplies,
122   GetUserMentions,
123   MarkUserMentionAsRead,
124   GetModlog,
125   BanFromCommunity,
126   AddModToCommunity,
127   CreateSite,
128   EditSite,
129   GetSite,
130   AddAdmin,
131   BanUser,
132   Search,
133   MarkAllAsRead,
134   SaveUserSettings,
135   TransferCommunity,
136   TransferSite,
137   DeleteAccount,
138   PasswordReset,
139   PasswordChange,
140   CreatePrivateMessage,
141   EditPrivateMessage,
142   DeletePrivateMessage,
143   MarkPrivateMessageAsRead,
144   GetPrivateMessages,
145   UserJoin,
146   GetComments,
147   GetSiteConfig,
148   SaveSiteConfig,
149   PostJoin,
150   CommunityJoin,
151   ModJoin,
152 }