X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapi_crud%2Fsrc%2Flib.rs;h=e793428650f4d20a1173b0935a05c47ea2c5fc31;hb=5d23ef960e3361d1cc38c1aff1d907d8da58b90f;hp=9f1553ee16b0edc4d006545de30eea8664dcce11;hpb=d2e28e5f3836bf1bee1dabc09d14ec79b2e40858;p=lemmy.git diff --git a/crates/api_crud/src/lib.rs b/crates/api_crud/src/lib.rs index 9f1553ee..e7934286 100644 --- a/crates/api_crud/src/lib.rs +++ b/crates/api_crud/src/lib.rs @@ -1,135 +1,18 @@ -use actix_web::{web, web::Data}; -use lemmy_api_common::{comment::*, community::*, person::*, post::*, site::*}; -use lemmy_utils::{ConnectionId, LemmyError}; -use lemmy_websocket::{serialize_websocket_message, LemmyContext, UserOperationCrud}; -use serde::Deserialize; +use actix_web::web::Data; +use lemmy_api_common::context::LemmyContext; +use lemmy_utils::error::LemmyError; mod comment; mod community; -mod post; +mod custom_emoji; +pub mod post; mod private_message; mod site; mod user; #[async_trait::async_trait(?Send)] pub trait PerformCrud { - type Response: serde::ser::Serialize + Send; + type Response: serde::ser::Serialize + Send + Clone + Sync; - async fn perform( - &self, - context: &Data, - websocket_id: Option, - ) -> Result; -} - -pub async fn match_websocket_operation_crud( - context: LemmyContext, - id: ConnectionId, - op: UserOperationCrud, - data: &str, -) -> Result { - //TODO: handle commented out actions in crud crate - - match op { - // User ops - UserOperationCrud::Register => do_websocket_operation::(context, id, op, data).await, - UserOperationCrud::GetPersonDetails => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::DeleteAccount => { - do_websocket_operation::(context, id, op, data).await - } - - // Private Message ops - UserOperationCrud::CreatePrivateMessage => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::EditPrivateMessage => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::DeletePrivateMessage => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::GetPrivateMessages => { - do_websocket_operation::(context, id, op, data).await - } - - // Site ops - UserOperationCrud::CreateSite => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::EditSite => do_websocket_operation::(context, id, op, data).await, - UserOperationCrud::GetSite => do_websocket_operation::(context, id, op, data).await, - - // Community ops - UserOperationCrud::GetCommunity => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::ListCommunities => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::CreateCommunity => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::EditCommunity => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::DeleteCommunity => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::RemoveCommunity => { - do_websocket_operation::(context, id, op, data).await - } - - // Post ops - UserOperationCrud::CreatePost => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::GetPost => do_websocket_operation::(context, id, op, data).await, - UserOperationCrud::GetPosts => do_websocket_operation::(context, id, op, data).await, - UserOperationCrud::EditPost => do_websocket_operation::(context, id, op, data).await, - UserOperationCrud::DeletePost => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::RemovePost => { - do_websocket_operation::(context, id, op, data).await - } - - // Comment ops - UserOperationCrud::CreateComment => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::EditComment => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::DeleteComment => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::RemoveComment => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::GetComment => { - do_websocket_operation::(context, id, op, data).await - } - UserOperationCrud::GetComments => { - do_websocket_operation::(context, id, op, data).await - } - } -} - -async fn do_websocket_operation<'a, 'b, Data>( - context: LemmyContext, - id: ConnectionId, - op: UserOperationCrud, - data: &str, -) -> Result -where - for<'de> Data: Deserialize<'de> + 'a, - Data: PerformCrud, -{ - let parsed_data: Data = serde_json::from_str(data)?; - let res = parsed_data - .perform(&web::Data::new(context), Some(id)) - .await?; - serialize_websocket_message(&op, &res) + async fn perform(&self, context: &Data) -> Result; }