use lemmy_api_common::{
comment::*, community::*, custom_emoji::*, person::*, post::*, private_message::*, site::*,
};
use serde::Serialize;
use std::fmt;
use crate::utils::impl_marker_trait;
pub trait LemmyForm: Serialize + Clone + fmt::Debug {}
#[derive(Debug, Clone)]
pub struct LemmyRequest<Body>
where
Body: LemmyForm,
{
pub body: Body,
pub jwt: Option<String>,
}
impl LemmyRequest<()> {
pub fn empty() -> Self {
Self {
body: (),
jwt: None,
}
}
pub fn from_jwt(jwt: Option<String>) -> Self {
Self { body: (), jwt }
}
}
impl<Form> From<Form> for LemmyRequest<Form>
where
Form: LemmyForm,
{
fn from(body: Form) -> Self {
Self { body, jwt: None }
}
}
impl_marker_trait!(
LemmyForm,
[
(),
String,
CreateComment,
CreateCommentLike,
CreateCommentReport,
DeleteComment,
DistinguishComment,
EditComment,
GetComment,
GetComments,
ListCommentLikes,
ListCommentReports,
RemoveComment,
ResolveCommentReport,
SaveComment,
AddModToCommunity,
BanFromCommunity,
BlockCommunity,
CreateCommunity,
DeleteCommunity,
EditCommunity,
FollowCommunity,
GetCommunity,
HideCommunity,
ListCommunities,
RemoveCommunity,
TransferCommunity,
CreateCustomEmoji,
DeleteCustomEmoji,
EditCustomEmoji,
AddAdmin,
BanPerson,
BlockPerson,
ChangePassword,
DeleteAccount,
GetPersonDetails,
GetPersonMentions,
GetReplies,
GetReportCount,
Login,
MarkCommentReplyAsRead,
MarkPersonMentionAsRead,
PasswordChangeAfterReset,
PasswordReset,
PersonMentionResponse,
Register,
SaveUserSettings,
UpdateTotp,
VerifyEmail,
CreatePost,
CreatePostLike,
CreatePostReport,
DeletePost,
EditPost,
FeaturePost,
GetPost,
GetPosts,
GetSiteMetadata,
ListPostLikes,
ListPostReports,
LockPost,
MarkPostAsRead,
RemovePost,
ResolvePostReport,
SavePost,
HidePost,
CreatePrivateMessage,
CreatePrivateMessageReport,
DeletePrivateMessage,
EditPrivateMessage,
GetPrivateMessages,
ListPrivateMessageReports,
MarkPrivateMessageAsRead,
ResolvePrivateMessageReport,
ApproveRegistrationApplication,
BlockInstance,
CreateSite,
EditSite,
FederatedInstances,
GetModlog,
InstanceWithFederationState,
ListRegistrationApplications,
PurgeComment,
PurgeCommunity,
PurgePerson,
PurgePost,
ResolveObject,
Search,
ListMedia
]
);