]> Untitled Git - lemmy.git/blob - crates/websocket/src/lib.rs
First pass at adding comment trees. (#2362)
[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 lemmy_db_schema::{source::secret::Secret, utils::DbPool};
7 use lemmy_utils::{
8   error::LemmyError,
9   settings::{structs::Settings, SETTINGS},
10 };
11 use reqwest_middleware::ClientWithMiddleware;
12 use serde::Serialize;
13
14 pub mod chat_server;
15 pub mod handlers;
16 pub mod messages;
17 pub mod routes;
18 pub mod send;
19
20 pub struct LemmyContext {
21   pool: DbPool,
22   chat_server: Addr<ChatServer>,
23   client: ClientWithMiddleware,
24   settings: Settings,
25   secret: Secret,
26 }
27
28 impl LemmyContext {
29   pub fn create(
30     pool: DbPool,
31     chat_server: Addr<ChatServer>,
32     client: ClientWithMiddleware,
33     settings: Settings,
34     secret: Secret,
35   ) -> LemmyContext {
36     LemmyContext {
37       pool,
38       chat_server,
39       client,
40       settings,
41       secret,
42     }
43   }
44   pub fn pool(&self) -> &DbPool {
45     &self.pool
46   }
47   pub fn chat_server(&self) -> &Addr<ChatServer> {
48     &self.chat_server
49   }
50   pub fn client(&self) -> &ClientWithMiddleware {
51     &self.client
52   }
53   pub fn settings(&self) -> &'static Settings {
54     &SETTINGS
55   }
56   pub fn secret(&self) -> &Secret {
57     &self.secret
58   }
59 }
60
61 impl Clone for LemmyContext {
62   fn clone(&self) -> Self {
63     LemmyContext {
64       pool: self.pool.clone(),
65       chat_server: self.chat_server.clone(),
66       client: self.client.clone(),
67       settings: self.settings.clone(),
68       secret: self.secret.clone(),
69     }
70   }
71 }
72
73 #[derive(Serialize)]
74 struct WebsocketResponse<T> {
75   op: String,
76   data: T,
77 }
78
79 pub fn serialize_websocket_message<OP, Response>(
80   op: &OP,
81   data: &Response,
82 ) -> Result<String, LemmyError>
83 where
84   Response: Serialize,
85   OP: ToString,
86 {
87   let response = WebsocketResponse {
88     op: op.to_string(),
89     data,
90   };
91   Ok(serde_json::to_string(&response)?)
92 }
93
94 #[derive(EnumString, Display, Debug, Clone)]
95 pub enum UserOperation {
96   Login,
97   GetCaptcha,
98   SaveComment,
99   CreateCommentLike,
100   CreateCommentReport,
101   ResolveCommentReport,
102   ListCommentReports,
103   CreatePostLike,
104   LockPost,
105   StickyPost,
106   MarkPostAsRead,
107   SavePost,
108   CreatePostReport,
109   ResolvePostReport,
110   ListPostReports,
111   GetReportCount,
112   GetUnreadCount,
113   VerifyEmail,
114   FollowCommunity,
115   GetReplies,
116   GetPersonMentions,
117   MarkPersonMentionAsRead,
118   MarkCommentReplyAsRead,
119   GetModlog,
120   BanFromCommunity,
121   AddModToCommunity,
122   AddAdmin,
123   GetUnreadRegistrationApplicationCount,
124   ListRegistrationApplications,
125   ApproveRegistrationApplication,
126   BanPerson,
127   GetBannedPersons,
128   Search,
129   ResolveObject,
130   MarkAllAsRead,
131   SaveUserSettings,
132   TransferCommunity,
133   LeaveAdmin,
134   PasswordReset,
135   PasswordChange,
136   MarkPrivateMessageAsRead,
137   UserJoin,
138   PostJoin,
139   CommunityJoin,
140   ModJoin,
141   ChangePassword,
142   GetSiteMetadata,
143   BlockCommunity,
144   BlockPerson,
145   PurgePerson,
146   PurgeCommunity,
147   PurgePost,
148   PurgeComment,
149 }
150
151 #[derive(EnumString, Display, Debug, Clone)]
152 pub enum UserOperationCrud {
153   // Site
154   CreateSite,
155   GetSite,
156   EditSite,
157   // Community
158   CreateCommunity,
159   ListCommunities,
160   GetCommunity,
161   EditCommunity,
162   DeleteCommunity,
163   RemoveCommunity,
164   // Post
165   CreatePost,
166   GetPost,
167   GetPosts,
168   EditPost,
169   DeletePost,
170   RemovePost,
171   // Comment
172   CreateComment,
173   GetComment,
174   GetComments,
175   EditComment,
176   DeleteComment,
177   RemoveComment,
178   // User
179   Register,
180   GetPersonDetails,
181   DeleteAccount,
182   // Private Message
183   CreatePrivateMessage,
184   GetPrivateMessages,
185   EditPrivateMessage,
186   DeletePrivateMessage,
187 }
188
189 pub trait OperationType {}
190
191 impl OperationType for UserOperationCrud {}
192
193 impl OperationType for UserOperation {}