use crate::newtypes::{DbUrl, InstanceId, SiteId}; #[cfg(feature = "full")] use crate::schema::site; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; #[cfg(feature = "full")] use ts_rs::TS; use typed_builder::TypedBuilder; #[skip_serializing_none] #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable, TS))] #[cfg_attr(feature = "full", diesel(table_name = site))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] /// The site. pub struct Site { pub id: SiteId, pub name: String, /// A sidebar for the site in markdown. pub sidebar: Option, pub published: DateTime, pub updated: Option>, /// An icon URL. pub icon: Option, /// A banner url. pub banner: Option, /// A shorter, one-line description of the site. pub description: Option, /// The federated actor_id. pub actor_id: DbUrl, /// The time the site was last refreshed. pub last_refreshed_at: DateTime, /// The site inbox pub inbox_url: DbUrl, #[serde(skip)] pub private_key: Option, // TODO: mark as `serde(skip)` in next major release as its not needed for api pub public_key: String, pub instance_id: InstanceId, /// If present, nsfw content is visible by default. Should be displayed by frontends/clients /// when the site is first opened by a user. pub content_warning: Option, } #[derive(Clone, TypedBuilder)] #[builder(field_defaults(default))] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = site))] pub struct SiteInsertForm { #[builder(!default)] pub name: String, pub sidebar: Option, pub updated: Option>, pub icon: Option, pub banner: Option, pub description: Option, pub actor_id: Option, pub last_refreshed_at: Option>, pub inbox_url: Option, pub private_key: Option, pub public_key: Option, #[builder(!default)] pub instance_id: InstanceId, pub content_warning: Option, } #[derive(Clone, Default)] #[cfg_attr(feature = "full", derive(AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = site))] pub struct SiteUpdateForm { pub name: Option, pub sidebar: Option>, pub updated: Option>>, // when you want to null out a column, you have to send Some(None)), since sending None means you just don't want to update that column. pub icon: Option>, pub banner: Option>, pub description: Option>, pub actor_id: Option, pub last_refreshed_at: Option>, pub inbox_url: Option, pub private_key: Option>, pub public_key: Option, pub content_warning: Option>, }