]> Untitled Git - lemmy.git/blob - server/src/api/mod.rs
Trying to add r2d2 connection pooling to websockets.
[lemmy.git] / server / src / api / mod.rs
1 use crate::db::category::*;
2 use crate::db::comment::*;
3 use crate::db::comment_view::*;
4 use crate::db::community::*;
5 use crate::db::community_view::*;
6 use crate::db::moderator::*;
7 use crate::db::moderator_views::*;
8 use crate::db::password_reset_request::*;
9 use crate::db::post::*;
10 use crate::db::post_view::*;
11 use crate::db::site::*;
12 use crate::db::site_view::*;
13 use crate::db::user::*;
14 use crate::db::user_mention::*;
15 use crate::db::user_mention_view::*;
16 use crate::db::user_view::*;
17 use crate::db::*;
18 use crate::{extract_usernames, has_slurs, naive_from_unix, naive_now, remove_slurs};
19 use diesel::PgConnection;
20 use failure::Error;
21 use serde::{Deserialize, Serialize};
22
23 pub mod comment;
24 pub mod community;
25 pub mod post;
26 pub mod site;
27 pub mod user;
28
29 #[derive(EnumString, ToString, Debug)]
30 pub enum UserOperation {
31   Login,
32   Register,
33   CreateCommunity,
34   CreatePost,
35   ListCommunities,
36   ListCategories,
37   GetPost,
38   GetCommunity,
39   CreateComment,
40   EditComment,
41   SaveComment,
42   CreateCommentLike,
43   GetPosts,
44   CreatePostLike,
45   EditPost,
46   SavePost,
47   EditCommunity,
48   FollowCommunity,
49   GetFollowedCommunities,
50   GetUserDetails,
51   GetReplies,
52   GetUserMentions,
53   EditUserMention,
54   GetModlog,
55   BanFromCommunity,
56   AddModToCommunity,
57   CreateSite,
58   EditSite,
59   GetSite,
60   AddAdmin,
61   BanUser,
62   Search,
63   MarkAllAsRead,
64   SaveUserSettings,
65   TransferCommunity,
66   TransferSite,
67   DeleteAccount,
68   PasswordReset,
69   PasswordChange,
70 }
71
72 #[derive(Fail, Debug)]
73 #[fail(display = "{{\"op\":\"{}\", \"error\":\"{}\"}}", op, message)]
74 pub struct APIError {
75   pub op: String,
76   pub message: String,
77 }
78
79 impl APIError {
80   pub fn err(op: &UserOperation, msg: &str) -> Self {
81     APIError {
82       op: op.to_string(),
83       message: msg.to_string(),
84     }
85   }
86 }
87
88 pub struct Oper<T> {
89   op: UserOperation,
90   data: T,
91 }
92
93 impl<T> Oper<T> {
94   pub fn new(op: UserOperation, data: T) -> Oper<T> {
95     Oper { op, data }
96   }
97 }
98
99 pub trait Perform<T> {
100   fn perform(&self, conn: &PgConnection) -> Result<T, Error>
101   where
102     T: Sized;
103 }