]> Untitled Git - lemmy.git/commitdiff
Derive default for api request structs, move type enums (#2245)
authorNutomic <me@nutomic.com>
Fri, 6 May 2022 20:55:07 +0000 (20:55 +0000)
committerGitHub <noreply@github.com>
Fri, 6 May 2022 20:55:07 +0000 (20:55 +0000)
* Derive default for api request structs, move type enums

* Simplify api by using enum types directly, instead of string

* Add default and clone for most api structs

26 files changed:
crates/api/src/local_user/notifications/list_mentions.rs
crates/api/src/local_user/notifications/list_replies.rs
crates/api/src/site/search.rs
crates/api_common/src/comment.rs
crates/api_common/src/community.rs
crates/api_common/src/lib.rs
crates/api_common/src/person.rs
crates/api_common/src/post.rs
crates/api_common/src/sensitive.rs
crates/api_common/src/site.rs
crates/api_common/src/websocket.rs
crates/api_crud/src/comment/list.rs
crates/api_crud/src/community/list.rs
crates/api_crud/src/post/list.rs
crates/api_crud/src/site/update.rs
crates/api_crud/src/user/read.rs
crates/db_schema/Cargo.toml
crates/db_schema/src/lib.rs
crates/db_schema/src/newtypes.rs
crates/db_schema/src/utils.rs
crates/db_views/src/comment_view.rs
crates/db_views/src/post_view.rs
crates/db_views_actor/src/community_view.rs
crates/db_views_actor/src/person_mention_view.rs
crates/db_views_actor/src/person_view.rs
crates/routes/src/feeds.rs

index 91409b6d35e6fd2a650d007cf4d4c8f6287f89db..6e786841012150ca3aa4a3c392c2269a11f0b0c3 100644 (file)
@@ -4,7 +4,6 @@ use lemmy_api_common::{
   person::{GetPersonMentions, GetPersonMentionsResponse},
   utils::{blocking, get_local_user_view_from_jwt},
 };
-use lemmy_db_schema::utils::{from_opt_str_to_opt_enum, SortType};
 use lemmy_db_views_actor::person_mention_view::PersonMentionQueryBuilder;
 use lemmy_utils::{ConnectionId, LemmyError};
 use lemmy_websocket::LemmyContext;
@@ -23,8 +22,7 @@ impl Perform for GetPersonMentions {
     let local_user_view =
       get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?;
 
-    let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
-
+    let sort = data.sort;
     let page = data.page;
     let limit = data.limit;
     let unread_only = data.unread_only;
index 1d9aaa2f0e222b9d0d90ae9155dcf31490c008e1..643a1c9a867f1f7b8adc853a559e1a11218f76a8 100644 (file)
@@ -4,7 +4,6 @@ use lemmy_api_common::{
   person::{GetReplies, GetRepliesResponse},
   utils::{blocking, get_local_user_view_from_jwt},
 };
-use lemmy_db_schema::utils::{from_opt_str_to_opt_enum, SortType};
 use lemmy_db_views::comment_view::CommentQueryBuilder;
 use lemmy_utils::{ConnectionId, LemmyError};
 use lemmy_websocket::LemmyContext;
@@ -23,8 +22,7 @@ impl Perform for GetReplies {
     let local_user_view =
       get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?;
 
-    let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
-
+    let sort = data.sort;
     let page = data.page;
     let limit = data.limit;
     let unread_only = data.unread_only;
index b4d2069c35be718becc69c6d853d8c7249f1f75c..5e1474238e03132e6a9f7d14824d9be167a9a7f6 100644 (file)
@@ -5,11 +5,7 @@ use lemmy_api_common::{
   utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
 };
 use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity};
-use lemmy_db_schema::{
-  source::community::Community,
-  traits::DeleteableOrRemoveable,
-  utils::{from_opt_str_to_opt_enum, ListingType, SearchType, SortType},
-};
+use lemmy_db_schema::{source::community::Community, traits::DeleteableOrRemoveable, SearchType};
 use lemmy_db_views::{comment_view::CommentQueryBuilder, post_view::PostQueryBuilder};
 use lemmy_db_views_actor::{
   community_view::CommunityQueryBuilder,
@@ -56,9 +52,9 @@ impl Perform for Search {
     let q = data.q.to_owned();
     let page = data.page;
     let limit = data.limit;
-    let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
-    let listing_type: Option<ListingType> = from_opt_str_to_opt_enum(&data.listing_type);
-    let search_type: SearchType = from_opt_str_to_opt_enum(&data.type_).unwrap_or(SearchType::All);
+    let sort = data.sort;
+    let listing_type = data.listing_type;
+    let search_type = data.type_.unwrap_or(SearchType::All);
     let community_id = data.community_id;
     let community_actor_id = if let Some(name) = &data.community_name {
       resolve_actor_identifier::<ApubCommunity, Community>(name, context)
index 048a3439943093030ffd131682d9de7c1c53b890..790f21ae3ed1b28c880f65332cafa87669af540f 100644 (file)
@@ -1,9 +1,13 @@
 use crate::sensitive::Sensitive;
-use lemmy_db_schema::newtypes::{CommentId, CommentReportId, CommunityId, LocalUserId, PostId};
+use lemmy_db_schema::{
+  newtypes::{CommentId, CommentReportId, CommunityId, LocalUserId, PostId},
+  ListingType,
+  SortType,
+};
 use lemmy_db_views::structs::{CommentReportView, CommentView};
 use serde::{Deserialize, Serialize};
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreateComment {
   pub content: String,
   pub post_id: PostId,
@@ -12,13 +16,13 @@ pub struct CreateComment {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetComment {
   pub id: CommentId,
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct EditComment {
   pub content: String,
   pub comment_id: CommentId,
@@ -26,14 +30,14 @@ pub struct EditComment {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct DeleteComment {
   pub comment_id: CommentId,
   pub deleted: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct RemoveComment {
   pub comment_id: CommentId,
   pub removed: bool,
@@ -41,14 +45,14 @@ pub struct RemoveComment {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct MarkCommentAsRead {
   pub comment_id: CommentId,
   pub read: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct SaveComment {
   pub comment_id: CommentId,
   pub save: bool,
@@ -62,17 +66,17 @@ pub struct CommentResponse {
   pub form_id: Option<String>, // An optional front end ID, to tell which is coming back
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreateCommentLike {
   pub comment_id: CommentId,
   pub score: i16,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetComments {
-  pub type_: Option<String>,
-  pub sort: Option<String>,
+  pub type_: Option<ListingType>,
+  pub sort: Option<SortType>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub community_id: Option<CommunityId>,
@@ -81,12 +85,12 @@ pub struct GetComments {
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetCommentsResponse {
   pub comments: Vec<CommentView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreateCommentReport {
   pub comment_id: CommentId,
   pub reason: String,
@@ -98,14 +102,14 @@ pub struct CommentReportResponse {
   pub comment_report_view: CommentReportView,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ResolveCommentReport {
   pub report_id: CommentReportId,
   pub resolved: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ListCommentReports {
   pub page: Option<i64>,
   pub limit: Option<i64>,
@@ -116,7 +120,7 @@ pub struct ListCommentReports {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct ListCommentReportsResponse {
   pub comment_reports: Vec<CommentReportView>,
 }
index 0635b9fa0f772d28553730a7908caf6334bb4439..90c86f1c2d3c2671cf112c26e8e941ff13e890da 100644 (file)
@@ -2,11 +2,13 @@ use crate::sensitive::Sensitive;
 use lemmy_db_schema::{
   newtypes::{CommunityId, PersonId},
   source::site::Site,
+  ListingType,
+  SortType,
 };
 use lemmy_db_views_actor::structs::{CommunityModeratorView, CommunityView, PersonViewSafe};
 use serde::{Deserialize, Serialize};
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetCommunity {
   pub id: Option<CommunityId>,
   /// Example: star_trek , or star_trek@xyz.tld
@@ -14,7 +16,7 @@ pub struct GetCommunity {
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetCommunityResponse {
   pub community_view: CommunityView,
   pub site: Option<Site>,
@@ -22,7 +24,7 @@ pub struct GetCommunityResponse {
   pub online: usize,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreateCommunity {
   pub name: String,
   pub title: String,
@@ -39,21 +41,21 @@ pub struct CommunityResponse {
   pub community_view: CommunityView,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ListCommunities {
-  pub type_: Option<String>,
-  pub sort: Option<String>,
+  pub type_: Option<ListingType>,
+  pub sort: Option<SortType>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct ListCommunitiesResponse {
   pub communities: Vec<CommunityView>,
 }
 
-#[derive(Debug, Serialize, Deserialize, Clone)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct BanFromCommunity {
   pub community_id: CommunityId,
   pub person_id: PersonId,
@@ -70,7 +72,7 @@ pub struct BanFromCommunityResponse {
   pub banned: bool,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct AddModToCommunity {
   pub community_id: CommunityId,
   pub person_id: PersonId,
@@ -83,7 +85,7 @@ pub struct AddModToCommunityResponse {
   pub moderators: Vec<CommunityModeratorView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct EditCommunity {
   pub community_id: CommunityId,
   pub title: Option<String>,
@@ -95,7 +97,7 @@ pub struct EditCommunity {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct HideCommunity {
   pub community_id: CommunityId,
   pub hidden: bool,
@@ -103,14 +105,14 @@ pub struct HideCommunity {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct DeleteCommunity {
   pub community_id: CommunityId,
   pub deleted: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct RemoveCommunity {
   pub community_id: CommunityId,
   pub removed: bool,
@@ -119,14 +121,14 @@ pub struct RemoveCommunity {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct FollowCommunity {
   pub community_id: CommunityId,
   pub follow: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct BlockCommunity {
   pub community_id: CommunityId,
   pub block: bool,
@@ -139,7 +141,7 @@ pub struct BlockCommunityResponse {
   pub blocked: bool,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct TransferCommunity {
   pub community_id: CommunityId,
   pub person_id: PersonId,
index 0dda34ec5a06a01bf8e9e6347cbfcc38c15e156f..6cb9a2f1fdd46fc81d4379516bf0978511b23e4d 100644 (file)
@@ -4,7 +4,7 @@ pub mod person;
 pub mod post;
 #[cfg(feature = "full")]
 pub mod request;
-mod sensitive;
+pub mod sensitive;
 pub mod site;
 #[cfg(feature = "full")]
 pub mod utils;
index 3bc09f774cd06f4392ee38fa0c8ccb6881176619..a910232565a59fb556884479ff217e0a8ec691bd 100644 (file)
@@ -3,14 +3,17 @@ use lemmy_db_views::structs::{CommentView, PostView, PrivateMessageView};
 use lemmy_db_views_actor::structs::{CommunityModeratorView, PersonMentionView, PersonViewSafe};
 use serde::{Deserialize, Serialize};
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct Login {
   pub username_or_email: Sensitive<String>,
   pub password: Sensitive<String>,
 }
-use lemmy_db_schema::newtypes::{CommunityId, PersonId, PersonMentionId, PrivateMessageId};
+use lemmy_db_schema::{
+  newtypes::{CommunityId, PersonId, PersonMentionId, PrivateMessageId},
+  SortType,
+};
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct Register {
   pub username: String,
   pub password: Sensitive<String>,
@@ -25,22 +28,22 @@ pub struct Register {
   pub answer: Option<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetCaptcha {}
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetCaptchaResponse {
   pub ok: Option<CaptchaResponse>, // Will be None if captchas are disabled
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct CaptchaResponse {
   pub png: String, // A Base64 encoded png
   pub wav: String, // A Base64 encoded wav audio
   pub uuid: String,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct SaveUserSettings {
   pub show_nsfw: Option<bool>,
   pub show_scores: Option<bool>,
@@ -63,7 +66,7 @@ pub struct SaveUserSettings {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ChangePassword {
   pub new_password: Sensitive<String>,
   pub new_password_verify: Sensitive<String>,
@@ -71,7 +74,7 @@ pub struct ChangePassword {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct LoginResponse {
   /// This is None in response to `Register` if email verification is enabled, or the server requires registration applications.
   pub jwt: Option<Sensitive<String>>,
@@ -79,12 +82,12 @@ pub struct LoginResponse {
   pub verify_email_sent: bool,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetPersonDetails {
   pub person_id: Option<PersonId>, // One of these two are required
   /// Example: dessalines , or dessalines@xyz.tld
   pub username: Option<String>,
-  pub sort: Option<String>,
+  pub sort: Option<SortType>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub community_id: Option<CommunityId>,
@@ -92,7 +95,7 @@ pub struct GetPersonDetails {
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetPersonDetailsResponse {
   pub person_view: PersonViewSafe,
   pub comments: Vec<CommentView>,
@@ -100,22 +103,22 @@ pub struct GetPersonDetailsResponse {
   pub moderates: Vec<CommunityModeratorView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetRepliesResponse {
   pub replies: Vec<CommentView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetPersonMentionsResponse {
   pub mentions: Vec<PersonMentionView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct MarkAllAsRead {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct AddAdmin {
   pub person_id: PersonId,
   pub added: bool,
@@ -127,7 +130,7 @@ pub struct AddAdminResponse {
   pub admins: Vec<PersonViewSafe>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct BanPerson {
   pub person_id: PersonId,
   pub ban: bool,
@@ -137,12 +140,12 @@ pub struct BanPerson {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetBannedPersons {
   pub auth: String,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct BannedPersonsResponse {
   pub banned: Vec<PersonViewSafe>,
 }
@@ -153,7 +156,7 @@ pub struct BanPersonResponse {
   pub banned: bool,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct BlockPerson {
   pub person_id: PersonId,
   pub block: bool,
@@ -166,25 +169,25 @@ pub struct BlockPersonResponse {
   pub blocked: bool,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetReplies {
-  pub sort: Option<String>,
+  pub sort: Option<SortType>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub unread_only: Option<bool>,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetPersonMentions {
-  pub sort: Option<String>,
+  pub sort: Option<SortType>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub unread_only: Option<bool>,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct MarkPersonMentionAsRead {
   pub person_mention_id: PersonMentionId,
   pub read: bool,
@@ -196,7 +199,7 @@ pub struct PersonMentionResponse {
   pub person_mention_view: PersonMentionView,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct DeleteAccount {
   pub password: Sensitive<String>,
   pub auth: Sensitive<String>,
@@ -205,7 +208,7 @@ pub struct DeleteAccount {
 #[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct DeleteAccountResponse {}
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct PasswordReset {
   pub email: Sensitive<String>,
 }
@@ -213,42 +216,42 @@ pub struct PasswordReset {
 #[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct PasswordResetResponse {}
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct PasswordChangeAfterReset {
   pub token: Sensitive<String>,
   pub password: Sensitive<String>,
   pub password_verify: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreatePrivateMessage {
   pub content: String,
   pub recipient_id: PersonId,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct EditPrivateMessage {
   pub private_message_id: PrivateMessageId,
   pub content: String,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct DeletePrivateMessage {
   pub private_message_id: PrivateMessageId,
   pub deleted: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct MarkPrivateMessageAsRead {
   pub private_message_id: PrivateMessageId,
   pub read: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetPrivateMessages {
   pub unread_only: Option<bool>,
   pub page: Option<i64>,
@@ -266,7 +269,7 @@ pub struct PrivateMessageResponse {
   pub private_message_view: PrivateMessageView,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetReportCount {
   pub community_id: Option<CommunityId>,
   pub auth: Sensitive<String>,
@@ -279,7 +282,7 @@ pub struct GetReportCountResponse {
   pub post_reports: i64,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetUnreadCount {
   pub auth: Sensitive<String>,
 }
@@ -291,7 +294,7 @@ pub struct GetUnreadCountResponse {
   pub private_messages: i64,
 }
 
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, Default)]
 pub struct VerifyEmail {
   pub token: String,
 }
index afab5e3054a5d55f4103798275d184338179e6b7..38aceed9ed9b118d4361dcfcf38a7b48e13470e8 100644 (file)
@@ -1,11 +1,15 @@
 use crate::sensitive::Sensitive;
-use lemmy_db_schema::newtypes::{CommunityId, PostId, PostReportId};
+use lemmy_db_schema::{
+  newtypes::{CommunityId, PostId, PostReportId},
+  ListingType,
+  SortType,
+};
 use lemmy_db_views::structs::{CommentView, PostReportView, PostView};
 use lemmy_db_views_actor::structs::{CommunityModeratorView, CommunityView};
 use serde::{Deserialize, Serialize};
 use url::Url;
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreatePost {
   pub name: String,
   pub community_id: CommunityId,
@@ -21,13 +25,13 @@ pub struct PostResponse {
   pub post_view: PostView,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetPost {
   pub id: PostId,
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetPostResponse {
   pub post_view: PostView,
   pub community_view: CommunityView,
@@ -36,10 +40,10 @@ pub struct GetPostResponse {
   pub online: usize,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Serialize, Deserialize, Debug, Clone, Default)]
 pub struct GetPosts {
-  pub type_: Option<String>,
-  pub sort: Option<String>,
+  pub type_: Option<ListingType>,
+  pub sort: Option<SortType>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub community_id: Option<CommunityId>,
@@ -48,19 +52,19 @@ pub struct GetPosts {
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Serialize, Deserialize, Debug, Clone)]
 pub struct GetPostsResponse {
   pub posts: Vec<PostView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreatePostLike {
   pub post_id: PostId,
   pub score: i16,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct EditPost {
   pub post_id: PostId,
   pub name: Option<String>,
@@ -70,14 +74,14 @@ pub struct EditPost {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct DeletePost {
   pub post_id: PostId,
   pub deleted: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct RemovePost {
   pub post_id: PostId,
   pub removed: bool,
@@ -85,35 +89,35 @@ pub struct RemovePost {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct MarkPostAsRead {
   pub post_id: PostId,
   pub read: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct LockPost {
   pub post_id: PostId,
   pub locked: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct StickyPost {
   pub post_id: PostId,
   pub stickied: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct SavePost {
   pub post_id: PostId,
   pub save: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreatePostReport {
   pub post_id: PostId,
   pub reason: String,
@@ -125,14 +129,14 @@ pub struct PostReportResponse {
   pub post_report_view: PostReportView,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ResolvePostReport {
   pub report_id: PostReportId,
   pub resolved: bool,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ListPostReports {
   pub page: Option<i64>,
   pub limit: Option<i64>,
@@ -143,22 +147,22 @@ pub struct ListPostReports {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct ListPostReportsResponse {
   pub post_reports: Vec<PostReportView>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetSiteMetadata {
   pub url: Url,
 }
 
-#[derive(Serialize, Deserialize, Clone, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetSiteMetadataResponse {
   pub metadata: SiteMetadata,
 }
 
-#[derive(Deserialize, Serialize, Debug, PartialEq, Clone)]
+#[derive(Debug, Deserialize, Serialize, PartialEq, Clone)]
 pub struct SiteMetadata {
   pub title: Option<String>,
   pub description: Option<String>,
index 7713bc8261ae0fe7617df45a4e5d01be29de0638..419e5ef647af2b93cb27b379ebd199e941d11fd1 100644 (file)
@@ -4,7 +4,7 @@ use std::{
   ops::{Deref, DerefMut},
 };
 
-#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Deserialize, Serialize)]
+#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Deserialize, Serialize, Default)]
 #[serde(transparent)]
 pub struct Sensitive<T>(T);
 
index da17eb050ff276da7332894a1e798b0f3a52eb05..99c7b4e8eb3cd6218040b594a91f4a278bd0058a 100644 (file)
@@ -1,5 +1,10 @@
 use crate::sensitive::Sensitive;
-use lemmy_db_schema::newtypes::{CommunityId, PersonId};
+use lemmy_db_schema::{
+  newtypes::{CommunityId, PersonId},
+  ListingType,
+  SearchType,
+  SortType,
+};
 use lemmy_db_views::structs::{
   CommentView,
   LocalUserSettingsView,
@@ -30,21 +35,21 @@ use lemmy_db_views_moderator::structs::{
 };
 use serde::{Deserialize, Serialize};
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct Search {
   pub q: String,
   pub community_id: Option<CommunityId>,
   pub community_name: Option<String>,
   pub creator_id: Option<PersonId>,
-  pub type_: Option<String>,
-  pub sort: Option<String>,
-  pub listing_type: Option<String>,
+  pub type_: Option<SearchType>,
+  pub sort: Option<SortType>,
+  pub listing_type: Option<ListingType>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct SearchResponse {
   pub type_: String,
   pub comments: Vec<CommentView>,
@@ -53,7 +58,7 @@ pub struct SearchResponse {
   pub users: Vec<PersonViewSafe>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ResolveObject {
   pub q: String,
   pub auth: Option<Sensitive<String>>,
@@ -67,7 +72,7 @@ pub struct ResolveObjectResponse {
   pub person: Option<PersonViewSafe>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetModlog {
   pub mod_person_id: Option<PersonId>,
   pub community_id: Option<CommunityId>,
@@ -76,7 +81,7 @@ pub struct GetModlog {
   pub auth: Option<Sensitive<String>>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetModlogResponse {
   pub removed_posts: Vec<ModRemovePostView>,
   pub locked_posts: Vec<ModLockPostView>,
@@ -91,7 +96,7 @@ pub struct GetModlogResponse {
   pub hidden_communities: Vec<ModHideCommunityView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct CreateSite {
   pub name: String,
   pub sidebar: Option<String>,
@@ -111,7 +116,7 @@ pub struct CreateSite {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct EditSite {
   pub name: Option<String>,
   pub sidebar: Option<String>,
@@ -131,7 +136,7 @@ pub struct EditSite {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct GetSite {
   pub auth: Option<Sensitive<String>>,
 }
@@ -141,7 +146,7 @@ pub struct SiteResponse {
   pub site_view: SiteView,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetSiteResponse {
   pub site_view: Option<SiteView>, // Because the site might not be set up yet
   pub admins: Vec<PersonViewSafe>,
@@ -151,7 +156,7 @@ pub struct GetSiteResponse {
   pub federated_instances: Option<FederatedInstances>, // Federation may be disabled
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct MyUserInfo {
   pub local_user_view: LocalUserSettingsView,
   pub follows: Vec<CommunityFollowerView>,
@@ -160,35 +165,35 @@ pub struct MyUserInfo {
   pub person_blocks: Vec<PersonBlockView>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct LeaveAdmin {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetSiteConfig {
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetSiteConfigResponse {
   pub config_hjson: String,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct SaveSiteConfig {
   pub config_hjson: String,
   pub auth: Sensitive<String>,
 }
 
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct FederatedInstances {
   pub linked: Vec<String>,
   pub allowed: Option<Vec<String>>,
   pub blocked: Option<Vec<String>>,
 }
 
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ListRegistrationApplications {
   /// Only shows the unread applications (IE those without an admin actor)
   pub unread_only: Option<bool>,
@@ -197,12 +202,12 @@ pub struct ListRegistrationApplications {
   pub auth: String,
 }
 
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct ListRegistrationApplicationsResponse {
   pub registration_applications: Vec<RegistrationApplicationView>,
 }
 
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone, Default)]
 pub struct ApproveRegistrationApplication {
   pub id: i32,
   pub approve: bool,
@@ -210,17 +215,17 @@ pub struct ApproveRegistrationApplication {
   pub auth: String,
 }
 
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct RegistrationApplicationResponse {
   pub registration_application: RegistrationApplicationView,
 }
 
-#[derive(Serialize, Deserialize)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetUnreadRegistrationApplicationCount {
   pub auth: String,
 }
 
-#[derive(Serialize, Deserialize, Clone)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct GetUnreadRegistrationApplicationCountResponse {
   pub registration_applications: i64,
 }
index 80729fcc70d96d86c2d068ce39c1d76e554a1a17..23f7b2bc5305187aa4110efb74e830bb84b4f51b 100644 (file)
@@ -2,7 +2,7 @@ use crate::sensitive::Sensitive;
 use lemmy_db_schema::newtypes::{CommunityId, PostId};
 use serde::{Deserialize, Serialize};
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct UserJoin {
   pub auth: Sensitive<String>,
 }
@@ -12,7 +12,7 @@ pub struct UserJoinResponse {
   pub joined: bool,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct CommunityJoin {
   pub community_id: CommunityId,
 }
@@ -22,7 +22,7 @@ pub struct CommunityJoinResponse {
   pub joined: bool,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct ModJoin {
   pub community_id: CommunityId,
 }
@@ -32,7 +32,7 @@ pub struct ModJoinResponse {
   pub joined: bool,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
+#[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct PostJoin {
   pub post_id: PostId,
 }
index ab9e25f1575c635130a5be1e069931da32e78467..f9c37de4821df3090f7484b9a219b943e4ede568 100644 (file)
@@ -5,11 +5,7 @@ use lemmy_api_common::{
   utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
 };
 use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity};
-use lemmy_db_schema::{
-  source::community::Community,
-  traits::DeleteableOrRemoveable,
-  utils::{from_opt_str_to_opt_enum, ListingType, SortType},
-};
+use lemmy_db_schema::{source::community::Community, traits::DeleteableOrRemoveable};
 use lemmy_db_views::comment_view::CommentQueryBuilder;
 use lemmy_utils::{ConnectionId, LemmyError};
 use lemmy_websocket::LemmyContext;
@@ -36,9 +32,6 @@ impl PerformCrud for GetComments {
       .map(|t| t.local_user.show_bot_accounts);
     let person_id = local_user_view.map(|u| u.person.id);
 
-    let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
-    let listing_type: Option<ListingType> = from_opt_str_to_opt_enum(&data.type_);
-
     let community_id = data.community_id;
     let community_actor_id = if let Some(name) = &data.community_name {
       resolve_actor_identifier::<ApubCommunity, Community>(name, context)
@@ -48,6 +41,8 @@ impl PerformCrud for GetComments {
     } else {
       None
     };
+    let sort = data.sort;
+    let listing_type = data.type_;
     let saved_only = data.saved_only;
     let page = data.page;
     let limit = data.limit;
index fac41c66fa774b1a9222c59db67ded470954dd85..af41b83e22219e477c171003789bdd9a190d7d90 100644 (file)
@@ -4,10 +4,7 @@ use lemmy_api_common::{
   community::{ListCommunities, ListCommunitiesResponse},
   utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
 };
-use lemmy_db_schema::{
-  traits::DeleteableOrRemoveable,
-  utils::{from_opt_str_to_opt_enum, ListingType, SortType},
-};
+use lemmy_db_schema::traits::DeleteableOrRemoveable;
 use lemmy_db_views_actor::community_view::CommunityQueryBuilder;
 use lemmy_utils::{ConnectionId, LemmyError};
 use lemmy_websocket::LemmyContext;
@@ -37,9 +34,8 @@ impl PerformCrud for ListCommunities {
       None => false,
     };
 
-    let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
-    let listing_type: Option<ListingType> = from_opt_str_to_opt_enum(&data.type_);
-
+    let sort = data.sort;
+    let listing_type = data.type_;
     let page = data.page;
     let limit = data.limit;
     let mut communities = blocking(context.pool(), move |conn| {
index 4b871e54f86490e1c85bc08fca3d7d4f14467359..574efeba81bfd3985012cf2873077abfee7fd74b 100644 (file)
@@ -8,7 +8,7 @@ use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubComm
 use lemmy_db_schema::{
   source::{community::Community, site::Site},
   traits::DeleteableOrRemoveable,
-  utils::{from_opt_str_to_opt_enum, ListingType, SortType},
+  ListingType,
 };
 use lemmy_db_views::post_view::PostQueryBuilder;
 use lemmy_utils::{ConnectionId, LemmyError};
@@ -42,15 +42,14 @@ impl PerformCrud for GetPosts {
       .as_ref()
       .map(|t| t.local_user.show_read_posts);
 
-    let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
-    let listing_type: ListingType = match from_opt_str_to_opt_enum(&data.type_) {
+    let sort = data.sort;
+    let listing_type: ListingType = match data.type_ {
       Some(l) => l,
       None => {
         let site = blocking(context.pool(), Site::read_local_site).await??;
         ListingType::from_str(&site.default_post_listing_type)?
       }
     };
-
     let page = data.page;
     let limit = data.limit;
     let community_id = data.community_id;
index ace19fd728e544b969ccf9e4e604142d137a86bb..d0c37bea9c26e6814e3731bb7713db0ad6ef4384 100644 (file)
@@ -16,7 +16,8 @@ use lemmy_db_schema::{
     site::{Site, SiteForm},
   },
   traits::Crud,
-  utils::{diesel_option_overwrite, diesel_option_overwrite_to_url, naive_now, ListingType},
+  utils::{diesel_option_overwrite, diesel_option_overwrite_to_url, naive_now},
+  ListingType,
 };
 use lemmy_db_views::structs::SiteView;
 use lemmy_utils::{utils::check_slurs_opt, ConnectionId, LemmyError};
index 4b54430daac07b11dcb72554707bdec2e95cf0fc..e00f602759ffc104be80ff9c9f4a38bdd8430f93 100644 (file)
@@ -5,10 +5,7 @@ use lemmy_api_common::{
   utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
 };
 use lemmy_apub::{fetcher::resolve_actor_identifier, objects::person::ApubPerson};
-use lemmy_db_schema::{
-  source::person::Person,
-  utils::{from_opt_str_to_opt_enum, SortType},
-};
+use lemmy_db_schema::source::person::Person;
 use lemmy_db_views::{comment_view::CommentQueryBuilder, post_view::PostQueryBuilder};
 use lemmy_db_views_actor::structs::{CommunityModeratorView, PersonViewSafe};
 use lemmy_utils::{ConnectionId, LemmyError};
@@ -39,8 +36,6 @@ impl PerformCrud for GetPersonDetails {
       .as_ref()
       .map(|t| t.local_user.show_read_posts);
 
-    let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
-
     let person_details_id = match data.person_id {
       Some(id) => id,
       None => {
@@ -66,6 +61,7 @@ impl PerformCrud for GetPersonDetails {
     })
     .await??;
 
+    let sort = data.sort;
     let page = data.page;
     let limit = data.limit;
     let saved_only = data.saved_only;
index b2e40ed8eb987231e2648cc1f58268c32a916107..eae821093534e5626ae43f7041bb2837d4ddada2 100644 (file)
@@ -14,12 +14,14 @@ doctest = false
 
 [features]
 full = ["diesel", "diesel-derive-newtype", "diesel_migrations", "bcrypt", "lemmy_utils",
-    "lemmy_apub_lib", "strum", "strum_macros", "sha2", "regex", "once_cell", "serde_json"]
+    "lemmy_apub_lib", "sha2", "regex", "once_cell", "serde_json"]
 
 [dependencies]
 chrono = { version = "0.4.19", features = ["serde"], default-features = false }
 serde = { version = "1.0.136", features = ["derive"] }
 url = { version = "2.2.2", features = ["serde"] }
+strum =  "0.24.0"
+strum_macros = "0.24.0"
 serde_json = { version = "1.0.79", features = ["preserve_order"], optional = true }
 lemmy_apub_lib = { version = "=0.16.3", path = "../apub_lib", optional = true }
 lemmy_utils = { version = "=0.16.3", path = "../utils", optional = true }
@@ -27,8 +29,6 @@ bcrypt = { version = "0.12.1", optional = true }
 diesel = { version = "1.4.8", features = ["postgres","chrono","r2d2","serde_json"], optional = true }
 diesel-derive-newtype = { version = "0.1.2", optional = true }
 diesel_migrations = { version = "1.4.0", optional = true }
-strum = { version = "0.24.0", optional = true }
-strum_macros = { version = "0.24.0", optional = true }
 sha2 = { version = "0.10.2", optional = true }
 regex = { version = "1.5.5", optional = true }
 once_cell = { version = "1.10.0", optional = true }
index e6dee1993fbd111fb375adbbc4db3b4f876f2f88..5c63f393a080be3a04872cb39328e8639d5866ee 100644 (file)
@@ -1,8 +1,5 @@
 #[cfg(feature = "full")]
 #[macro_use]
-extern crate strum_macros;
-#[cfg(feature = "full")]
-#[macro_use]
 extern crate diesel;
 #[cfg(feature = "full")]
 #[macro_use]
@@ -24,3 +21,38 @@ pub mod source;
 pub mod traits;
 #[cfg(feature = "full")]
 pub mod utils;
+
+use serde::{Deserialize, Serialize};
+use strum_macros::{Display, EnumString};
+
+#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)]
+pub enum SortType {
+  Active,
+  Hot,
+  New,
+  TopDay,
+  TopWeek,
+  TopMonth,
+  TopYear,
+  TopAll,
+  MostComments,
+  NewComments,
+}
+
+#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
+pub enum ListingType {
+  All,
+  Local,
+  Subscribed,
+  Community,
+}
+
+#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)]
+pub enum SearchType {
+  All,
+  Comments,
+  Posts,
+  Communities,
+  Users,
+  Url,
+}
index 946007a3f47d644dd459369d66bf7d93a91b7ca6..1e0ecf2b8066af126fc13ddfa98a2bc731d5b312 100644 (file)
@@ -20,7 +20,7 @@ impl fmt::Display for PostId {
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct PersonId(pub i32);
 
-#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct CommentId(pub i32);
 
@@ -38,7 +38,7 @@ pub struct CommunityId(pub i32);
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct LocalUserId(pub i32);
 
-#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct PrivateMessageId(i32);
 
@@ -48,23 +48,23 @@ impl fmt::Display for PrivateMessageId {
   }
 }
 
-#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct PersonMentionId(i32);
 
-#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct PersonBlockId(i32);
 
-#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct CommunityBlockId(i32);
 
-#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct CommentReportId(i32);
 
-#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
 #[cfg_attr(feature = "full", derive(DieselNewType))]
 pub struct PostReportId(i32);
 
index 585430572256d0eae12aa2096487b1607db96df1..09c5ecdd832efd9e10c5bb1ab1b3aa89b2d437cd 100644 (file)
@@ -12,7 +12,6 @@ use lemmy_apub_lib::{object_id::ObjectId, traits::ApubObject};
 use lemmy_utils::LemmyError;
 use once_cell::sync::Lazy;
 use regex::Regex;
-use serde::{Deserialize, Serialize};
 use std::{env, env::VarError, io::Write};
 use url::Url;
 
@@ -22,42 +21,6 @@ pub fn get_database_url_from_env() -> Result<String, VarError> {
   env::var("LEMMY_DATABASE_URL")
 }
 
-#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)]
-pub enum SortType {
-  Active,
-  Hot,
-  New,
-  TopDay,
-  TopWeek,
-  TopMonth,
-  TopYear,
-  TopAll,
-  MostComments,
-  NewComments,
-}
-
-#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
-pub enum ListingType {
-  All,
-  Local,
-  Subscribed,
-  Community,
-}
-
-#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)]
-pub enum SearchType {
-  All,
-  Comments,
-  Posts,
-  Communities,
-  Users,
-  Url,
-}
-
-pub fn from_opt_str_to_opt_enum<T: std::str::FromStr>(opt: &Option<String>) -> Option<T> {
-  opt.as_ref().and_then(|t| T::from_str(t).ok())
-}
-
 pub fn fuzzy_search(q: &str) -> String {
   let replaced = q.replace('%', "\\%").replace('_', "\\_").replace(' ', "%");
   format!("%{}%", replaced)
index c8b4d387e58e7a40a39dae3ea6f966ec3e2e391c..87ec3c07cd1e73be9499421e5a15fd2ac94a462f 100644 (file)
@@ -26,7 +26,9 @@ use lemmy_db_schema::{
     post::Post,
   },
   traits::{MaybeOptional, ToSafe, ViewToVec},
-  utils::{functions::hot_rank, fuzzy_search, limit_and_offset, ListingType, SortType},
+  utils::{functions::hot_rank, fuzzy_search, limit_and_offset},
+  ListingType,
+  SortType,
 };
 
 type CommentViewTuple = (
index 2fac5ade38329ba6cde1cad9f046cc74c08ff6df..2fe6d216f8a3cba086b89ca217acb65c65426a5a 100644 (file)
@@ -23,7 +23,9 @@ use lemmy_db_schema::{
     post::{Post, PostRead, PostSaved},
   },
   traits::{MaybeOptional, ToSafe, ViewToVec},
-  utils::{functions::hot_rank, fuzzy_search, limit_and_offset, ListingType, SortType},
+  utils::{functions::hot_rank, fuzzy_search, limit_and_offset},
+  ListingType,
+  SortType,
 };
 use tracing::debug;
 
@@ -505,7 +507,9 @@ mod tests {
       post::*,
     },
     traits::{Blockable, Crud, Likeable},
-    utils::{establish_unpooled_connection, ListingType, SortType},
+    utils::establish_unpooled_connection,
+    ListingType,
+    SortType,
   };
   use serial_test::serial;
 
index 637a2d905010b6bf273c0f2a010f73815e07a4ba..e6f828122102f8a053051d86afeebcc2cd698cf6 100644 (file)
@@ -9,7 +9,9 @@ use lemmy_db_schema::{
     community_block::CommunityBlock,
   },
   traits::{MaybeOptional, ToSafe, ViewToVec},
-  utils::{functions::hot_rank, fuzzy_search, limit_and_offset, ListingType, SortType},
+  utils::{functions::hot_rank, fuzzy_search, limit_and_offset},
+  ListingType,
+  SortType,
 };
 
 type CommunityViewTuple = (
index 59e9011388ebc321d5569094181fd6539da270b4..43c7f59464eb0f6d2b5f88be05f0f852773c0a82 100644 (file)
@@ -26,7 +26,8 @@ use lemmy_db_schema::{
     post::Post,
   },
   traits::{MaybeOptional, ToSafe, ViewToVec},
-  utils::{functions::hot_rank, limit_and_offset, SortType},
+  utils::{functions::hot_rank, limit_and_offset},
+  SortType,
 };
 
 type PersonMentionViewTuple = (
index 1849f80b16f61a7f03c5297e4266105ef4db613d..83886a190331fb467ac64113e974c2dfe6c56459 100644 (file)
@@ -6,7 +6,8 @@ use lemmy_db_schema::{
   schema::{person, person_aggregates},
   source::person::{Person, PersonSafe},
   traits::{MaybeOptional, ToSafe, ViewToVec},
-  utils::{fuzzy_search, limit_and_offset, SortType},
+  utils::{fuzzy_search, limit_and_offset},
+  SortType,
 };
 
 type PersonViewSafeTuple = (PersonSafe, PersonAggregates);
index 1bcfc6c3efbd7d9cde50e97222b898dffefbfd62..878c68b9ac29ef686d66099c290b64011dd04e90 100644 (file)
@@ -7,7 +7,8 @@ use lemmy_db_schema::{
   newtypes::LocalUserId,
   source::{community::Community, local_user::LocalUser, person::Person},
   traits::{ApubActor, Crud},
-  utils::{ListingType, SortType},
+  ListingType,
+  SortType,
 };
 use lemmy_db_views::{
   comment_view::CommentQueryBuilder,