]> Untitled Git - lemmy.git/blob - crates/api_crud/src/lib.rs
30c9ebd42d516f386050b4f27b1dfa33f14adea9
[lemmy.git] / crates / api_crud / src / lib.rs
1 use actix_web::web::Data;
2 use lemmy_api_common::context::LemmyContext;
3 use lemmy_db_schema::source::local_site::LocalSite;
4 use lemmy_utils::{error::LemmyError, ConnectionId};
5
6 mod comment;
7 mod community;
8 mod post;
9 mod private_message;
10 mod site;
11 mod user;
12
13 #[async_trait::async_trait(?Send)]
14 pub trait PerformCrud {
15   type Response: serde::ser::Serialize + Send;
16
17   async fn perform(
18     &self,
19     context: &Data<LemmyContext>,
20     websocket_id: Option<ConnectionId>,
21   ) -> Result<Self::Response, LemmyError>;
22 }
23
24 /// Make sure if applications are required, that there is an application questionnaire
25 pub fn check_application_question(
26   application_question: &Option<Option<String>>,
27   local_site: &LocalSite,
28   require_application: &Option<bool>,
29 ) -> Result<(), LemmyError> {
30   if require_application.unwrap_or(false)
31     && (application_question == &Some(None)
32       || (application_question.is_none() && local_site.application_question.is_none()))
33   {
34     return Err(LemmyError::from_message("application_question_required"));
35   }
36   Ok(())
37 }