+
+pub async fn match_websocket_operation_crud(
+ context: LemmyContext,
+ id: ConnectionId,
+ op: UserOperationCrud,
+ data: &str,
+) -> Result<String, LemmyError> {
+ //TODO: handle commented out actions in crud crate
+
+ match op {
+ // User ops
+ UserOperationCrud::Register => do_websocket_operation::<Register>(context, id, op, data).await,
+ UserOperationCrud::GetPersonDetails => {
+ do_websocket_operation::<GetPersonDetails>(context, id, op, data).await
+ }
+ UserOperationCrud::DeleteAccount => {
+ do_websocket_operation::<DeleteAccount>(context, id, op, data).await
+ }
+
+ // Private Message ops
+ UserOperationCrud::CreatePrivateMessage => {
+ do_websocket_operation::<CreatePrivateMessage>(context, id, op, data).await
+ }
+ UserOperationCrud::EditPrivateMessage => {
+ do_websocket_operation::<EditPrivateMessage>(context, id, op, data).await
+ }
+ UserOperationCrud::DeletePrivateMessage => {
+ do_websocket_operation::<DeletePrivateMessage>(context, id, op, data).await
+ }
+ UserOperationCrud::GetPrivateMessages => {
+ do_websocket_operation::<GetPrivateMessages>(context, id, op, data).await
+ }
+
+ // Site ops
+ UserOperationCrud::CreateSite => {
+ do_websocket_operation::<CreateSite>(context, id, op, data).await
+ }
+ UserOperationCrud::EditSite => do_websocket_operation::<EditSite>(context, id, op, data).await,
+ UserOperationCrud::GetSite => do_websocket_operation::<GetSite>(context, id, op, data).await,
+
+ // Community ops
+ UserOperationCrud::GetCommunity => {
+ do_websocket_operation::<GetCommunity>(context, id, op, data).await
+ }
+ UserOperationCrud::ListCommunities => {
+ do_websocket_operation::<ListCommunities>(context, id, op, data).await
+ }
+ UserOperationCrud::CreateCommunity => {
+ do_websocket_operation::<CreateCommunity>(context, id, op, data).await
+ }
+ UserOperationCrud::EditCommunity => {
+ do_websocket_operation::<EditCommunity>(context, id, op, data).await
+ }
+ UserOperationCrud::DeleteCommunity => {
+ do_websocket_operation::<DeleteCommunity>(context, id, op, data).await
+ }
+ UserOperationCrud::RemoveCommunity => {
+ do_websocket_operation::<RemoveCommunity>(context, id, op, data).await
+ }
+
+ // Post ops
+ UserOperationCrud::CreatePost => {
+ do_websocket_operation::<CreatePost>(context, id, op, data).await
+ }
+ UserOperationCrud::GetPost => do_websocket_operation::<GetPost>(context, id, op, data).await,
+ UserOperationCrud::GetPosts => do_websocket_operation::<GetPosts>(context, id, op, data).await,
+ UserOperationCrud::EditPost => do_websocket_operation::<EditPost>(context, id, op, data).await,
+ UserOperationCrud::DeletePost => {
+ do_websocket_operation::<DeletePost>(context, id, op, data).await
+ }
+ UserOperationCrud::RemovePost => {
+ do_websocket_operation::<RemovePost>(context, id, op, data).await
+ }
+
+ // Comment ops
+ UserOperationCrud::CreateComment => {
+ do_websocket_operation::<CreateComment>(context, id, op, data).await
+ }
+ UserOperationCrud::EditComment => {
+ do_websocket_operation::<EditComment>(context, id, op, data).await
+ }
+ UserOperationCrud::DeleteComment => {
+ do_websocket_operation::<DeleteComment>(context, id, op, data).await
+ }
+ UserOperationCrud::RemoveComment => {
+ do_websocket_operation::<RemoveComment>(context, id, op, data).await
+ }
+ UserOperationCrud::GetComments => {
+ do_websocket_operation::<GetComments>(context, id, op, data).await
+ }
+ }
+}
+
+async fn do_websocket_operation<'a, 'b, Data>(
+ context: LemmyContext,
+ id: ConnectionId,
+ op: UserOperationCrud,
+ data: &str,
+) -> Result<String, LemmyError>
+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)
+}