#[cfg(feature = "full")] use crate::schema::local_user; use crate::{ newtypes::{LocalUserId, PersonId}, sensitive::SensitiveString, CommentSortType, ListingType, PostListingMode, PostSortType, }; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; #[cfg(feature = "full")] use ts_rs::TS; #[skip_serializing_none] #[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize, Default)] #[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable, TS))] #[cfg_attr(feature = "full", diesel(table_name = local_user))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] #[serde(default)] /// A local user. pub struct LocalUser { pub id: LocalUserId, /// The person_id for the local user. pub person_id: PersonId, #[serde(skip)] pub password_encrypted: Option, #[cfg_attr(feature = "full", ts(optional))] pub email: Option, /// Whether to show NSFW content. pub show_nsfw: bool, pub theme: String, pub default_post_sort_type: PostSortType, pub default_listing_type: ListingType, pub interface_language: String, /// Whether to show avatars. pub show_avatars: bool, pub send_notifications_to_email: bool, /// Whether to show bot accounts. pub show_bot_accounts: bool, /// Whether to show read posts. pub show_read_posts: bool, /// Whether their email has been verified. pub email_verified: bool, /// Whether their registration application has been accepted. pub accepted_application: bool, #[serde(skip)] pub totp_2fa_secret: Option, /// Open links in a new tab. pub open_links_in_new_tab: bool, pub blur_nsfw: bool, /// Whether infinite scroll is enabled. pub infinite_scroll_enabled: bool, /// Whether the person is an admin. pub admin: bool, /// A post-view mode that changes how multiple post listings look. pub post_listing_mode: PostListingMode, pub totp_2fa_enabled: bool, /// Whether to allow keyboard navigation (for browsing and interacting with posts and comments). pub enable_keyboard_navigation: bool, /// Whether user avatars and inline images in the UI that are gifs should be allowed to play or /// should be paused pub enable_animated_images: bool, /// Whether a user can send / receive private messages pub enable_private_messages: bool, /// Whether to auto-collapse bot comments. pub collapse_bot_comments: bool, pub default_comment_sort_type: CommentSortType, /// Whether to automatically mark fetched posts as read. pub auto_mark_fetched_posts_as_read: bool, } #[derive(Clone, derive_new::new)] #[cfg_attr(feature = "full", derive(Insertable))] #[cfg_attr(feature = "full", diesel(table_name = local_user))] pub struct LocalUserInsertForm { pub person_id: PersonId, pub password_encrypted: Option, #[new(default)] pub email: Option, #[new(default)] pub show_nsfw: Option, #[new(default)] pub theme: Option, #[new(default)] pub default_post_sort_type: Option, #[new(default)] pub default_listing_type: Option, #[new(default)] pub interface_language: Option, #[new(default)] pub show_avatars: Option, #[new(default)] pub send_notifications_to_email: Option, #[new(default)] pub show_bot_accounts: Option, #[new(default)] pub show_read_posts: Option, #[new(default)] pub email_verified: Option, #[new(default)] pub accepted_application: Option, #[new(default)] pub totp_2fa_secret: Option>, #[new(default)] pub open_links_in_new_tab: Option, #[new(default)] pub blur_nsfw: Option, #[new(default)] pub infinite_scroll_enabled: Option, #[new(default)] pub admin: Option, #[new(default)] pub post_listing_mode: Option, #[new(default)] pub totp_2fa_enabled: Option, #[new(default)] pub enable_keyboard_navigation: Option, #[new(default)] pub enable_animated_images: Option, #[new(default)] pub enable_private_messages: Option, #[new(default)] pub collapse_bot_comments: Option, #[new(default)] pub default_comment_sort_type: Option, #[new(default)] pub auto_mark_fetched_posts_as_read: Option, } #[derive(Clone, Default)] #[cfg_attr(feature = "full", derive(AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = local_user))] pub struct LocalUserUpdateForm { pub password_encrypted: Option, pub email: Option>, pub show_nsfw: Option, pub theme: Option, pub default_post_sort_type: Option, pub default_listing_type: Option, pub interface_language: Option, pub show_avatars: Option, pub send_notifications_to_email: Option, pub show_bot_accounts: Option, pub show_read_posts: Option, pub email_verified: Option, pub accepted_application: Option, pub totp_2fa_secret: Option>, pub open_links_in_new_tab: Option, pub blur_nsfw: Option, pub infinite_scroll_enabled: Option, pub admin: Option, pub post_listing_mode: Option, pub totp_2fa_enabled: Option, pub enable_keyboard_navigation: Option, pub enable_animated_images: Option, pub enable_private_messages: Option, pub collapse_bot_comments: Option, pub default_comment_sort_type: Option, pub auto_mark_fetched_posts_as_read: Option, }