use crate::Error;
#[cfg(feature = "12-62-0")]
use misskey_api::model::clip::Clip;
#[cfg(feature = "12-9-0")]
use misskey_api::model::emoji::Emoji;
use misskey_api::model::{
announcement::Announcement,
log::{Log, LogLevel},
user::User,
};
use misskey_api::{endpoint, EntityRef};
use misskey_core::Client;
use url::Url;
pub struct ServerLogListBuilder<C> {
client: C,
request: endpoint::admin::logs::Request,
}
impl<C> ServerLogListBuilder<C> {
pub fn new(client: C) -> Self {
let request = endpoint::admin::logs::Request::default();
ServerLogListBuilder { client, request }
}
pub fn as_request(&self) -> &endpoint::admin::logs::Request {
&self.request
}
pub fn take(&mut self, length: u8) -> &mut Self {
self.request.limit.replace(length);
self
}
pub fn level(&mut self, level: LogLevel) -> &mut Self {
self.request.level.replace(level);
self
}
pub fn error(&mut self) -> &mut Self {
self.level(LogLevel::Error)
}
pub fn warning(&mut self) -> &mut Self {
self.level(LogLevel::Warning)
}
pub fn info(&mut self) -> &mut Self {
self.level(LogLevel::Info)
}
pub fn success(&mut self) -> &mut Self {
self.level(LogLevel::Success)
}
pub fn debug(&mut self) -> &mut Self {
self.level(LogLevel::Debug)
}
pub fn with_domain(&mut self, domain: impl AsRef<str>) -> &mut Self {
if let Some(domains) = self.request.domain.as_mut() {
domains.push(' ');
domains.push_str(domain.as_ref());
} else {
self.request.domain.replace(domain.as_ref().to_owned());
}
self
}
pub fn without_domain(&mut self, domain: impl AsRef<str>) -> &mut Self {
if let Some(domains) = self.request.domain.as_mut() {
domains.push_str(" -");
domains.push_str(domain.as_ref());
} else {
self.request.domain.replace(format!("-{}", domain.as_ref()));
}
self
}
}
impl<C: Client> ServerLogListBuilder<C> {
pub async fn list(&self) -> Result<Vec<Log>, Error<C::Error>> {
let logs = self
.client
.request(&self.request)
.await
.map_err(Error::Client)?
.into_result()?;
Ok(logs)
}
}
pub struct MetaUpdateBuilder<C> {
client: C,
request: endpoint::admin::update_meta::Request,
}
impl<C> MetaUpdateBuilder<C> {
pub fn new(client: C) -> Self {
let request = endpoint::admin::update_meta::Request::default();
MetaUpdateBuilder { client, request }
}
pub fn as_request(&self) -> &endpoint::admin::update_meta::Request {
&self.request
}
update_builder_bool_field! {
pub disable_registration;
pub disable_local_timeline;
pub disable_global_timeline;
pub use_star_for_reaction_fallback;
}
update_builder_string_collection_field! {
pub pinned_users;
pub hidden_tags;
pub blocked_hosts;
#[cfg(feature = "12-58-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-58-0")))]
pub pinned_pages;
}
update_builder_option_field! {
#[doc_name = "pinned clip"]
#[cfg(feature = "12-62-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-62-0")))]
pub pinned_clip : impl EntityRef<Clip> { pinned_clip_id = pinned_clip.entity_ref() };
}
update_builder_string_option_field! {
#[doc_name = "URL of the mascot image for the instance"]
pub mascot_image_url;
#[doc_name = "URL of the banner image for the instance"]
pub bannar_url;
#[doc_name = "URL of the error image for the instance"]
pub error_image_url;
#[doc_name = "URL of the icon for the instance"]
pub icon_url;
#[doc_name = "name of the instance"]
pub name;
#[doc_name = "description of the instance"]
pub description;
#[doc_name = "URL of the background image for the instance"]
#[cfg(feature = "12-60-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-60-0")))]
pub background_image_url;
#[doc_name = "URL of the logo image for the instance"]
#[cfg(feature = "12-60-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-60-0")))]
pub logo_image_url;
}
pub fn max_note_text_length(&mut self, max_note_text_length: u64) -> &mut Self {
self.request
.max_note_text_length
.replace(max_note_text_length);
self
}
pub fn local_drive_capacity(&mut self, mb: u64) -> &mut Self {
self.request.local_drive_capacity_mb.replace(mb);
self
}
pub fn remote_drive_capacity(&mut self, mb: u64) -> &mut Self {
self.request.remote_drive_capacity_mb.replace(mb);
self
}
update_builder_bool_field! {
pub cache_remote_files;
pub proxy_remote_files;
}
update_builder_bool_field! {
#[cfg(feature = "12-37-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-37-0")))]
pub enable_hcaptcha;
pub enable_recaptcha;
}
update_builder_string_option_field! {
#[doc_name = "hCaptcha site key"]
#[cfg(feature = "12-37-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-37-0")))]
pub hcaptcha_site_key;
#[doc_name = "hCaptcha secret key"]
#[cfg(feature = "12-37-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-37-0")))]
pub hcaptcha_secret_key;
#[doc_name = "reCAPTCHA site key"]
pub recaptcha_site_key;
#[doc_name = "reCAPTCHA secret key"]
pub recaptcha_secret_key;
}
update_builder_option_field! {
#[doc_name = "proxy account for the instance"]
pub proxy_account: impl EntityRef<User> { proxy_account_id = proxy_account.entity_ref() };
}
update_builder_string_option_field! {
#[doc_name = "name of the instance maintainer"]
pub maintainer_name;
#[doc_name = "email of the instance maintainer"]
pub maintainer_email;
}
update_builder_string_collection_field! {
pub languages { langs };
}
update_builder_option_field! {
#[doc_name = "summaly proxy URL"]
pub summaly_proxy: Url { summaly_proxy };
}
update_builder_bool_field! {
pub enable_twitter_integration;
}
update_builder_string_option_field! {
#[doc_name = "Twitter consumer key"]
pub twitter_consumer_key;
#[doc_name = "Twitter consumer secret"]
pub twitter_consumer_secret;
}
update_builder_bool_field! {
pub enable_github_integration;
}
update_builder_string_option_field! {
#[doc_name = "GitHub client ID"]
pub github_client_id;
#[doc_name = "GitHub client secret"]
pub github_client_secret;
}
update_builder_bool_field! {
pub enable_discord_integration;
}
update_builder_string_option_field! {
#[doc_name = "Discord client ID"]
pub discord_client_id;
#[doc_name = "Discord client secret"]
pub discord_client_secret;
}
update_builder_bool_field! {
pub enable_email;
pub smtp_secure;
}
update_builder_string_option_field! {
#[doc_name = "email address to be used for email delivery"]
pub email_address { email };
#[doc_name = "host of the SMTP server"]
pub smtp_host;
#[doc_name = "username of the SMTP server"]
pub smtp_user;
#[doc_name = "password of the SMTP server"]
pub smtp_pass;
}
update_builder_option_field! {
#[doc_name = "port number of the SMTP server"]
pub smtp_port: u16 { smtp_port };
}
update_builder_bool_field! {
pub enable_service_worker;
}
update_builder_string_option_field! {
#[doc_name = "public key for the service worker's VAPID key pair"]
pub service_worker_public_key { sw_public_key };
#[doc_name = "private key for the service worker's VAPID key pair"]
pub service_worker_private_key { sw_private_key };
}
update_builder_string_option_field! {
#[doc_name = "URL for the Terms of Service"]
pub tos_url;
}
pub fn repository_url(&mut self, url: Url) -> &mut Self {
self.request.repository_url.replace(url);
self
}
update_builder_string_option_field! {
#[doc_name = "URL for the feedback"]
pub feedback_url;
}
update_builder_bool_field! {
pub use_object_storage;
pub object_storage_use_ssl;
#[cfg(feature = "12-31-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-31-0")))]
pub object_storage_use_proxy;
#[cfg(feature = "12-47-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-47-0")))]
pub object_storage_set_public_read;
}
update_builder_option_field! {
#[doc_name = "base URL of the extenal object storage"]
pub object_storage_base_url: Url { object_storage_base_url };
#[doc_name = "port number of the extenal object storage"]
pub object_storage_port: u16 { object_storage_port };
}
update_builder_string_option_field! {
#[doc_name = "bucket name for the extenal object storage"]
pub object_storage_bucket;
#[doc_name = "prefix for the extenal object storage"]
pub object_storage_prefix;
#[doc_name = "endpoint for the extenal object storage"]
pub object_storage_endpoint;
#[doc_name = "region for the extenal object storage"]
pub object_storage_region;
#[doc_name = "access key for the extenal object storage"]
pub object_storage_access_key;
#[doc_name = "secret key for the extenal object storage"]
pub object_storage_secret_key;
}
}
impl<C: Client> MetaUpdateBuilder<C> {
pub async fn update(&self) -> Result<(), Error<C::Error>> {
self.client
.request(&self.request)
.await
.map_err(Error::Client)?
.into_result()?;
Ok(())
}
}
pub struct AnnouncementUpdateBuilder<C> {
client: C,
request: endpoint::admin::announcements::update::Request,
}
impl<C> AnnouncementUpdateBuilder<C> {
pub fn new(client: C, announcement: Announcement) -> Self {
let Announcement {
id,
title,
text,
image_url,
..
} = announcement;
let request = endpoint::admin::announcements::update::Request {
id,
title,
text,
image_url,
};
AnnouncementUpdateBuilder { client, request }
}
pub fn as_request(&self) -> &endpoint::admin::announcements::update::Request {
&self.request
}
pub fn title(&mut self, title: impl Into<String>) -> &mut Self {
self.request.title = title.into();
self
}
pub fn text(&mut self, text: impl Into<String>) -> &mut Self {
self.request.text = text.into();
self
}
pub fn set_image(&mut self, image_url: Url) -> &mut Self {
self.request.image_url.replace(image_url);
self
}
pub fn delete_image(&mut self) -> &mut Self {
self.request.image_url.take();
self
}
}
impl<C: Client> AnnouncementUpdateBuilder<C> {
pub async fn update(&self) -> Result<(), Error<C::Error>> {
self.client
.request(&self.request)
.await
.map_err(Error::Client)?
.into_result()?;
Ok(())
}
}
pub struct EmojiUpdateBuilder<C> {
client: C,
request: endpoint::admin::emoji::update::Request,
}
impl<C> EmojiUpdateBuilder<C> {
#[cfg(feature = "12-9-0")]
#[cfg_attr(docsrs, doc(cfg(feature = "12-9-0")))]
pub fn new(client: C, emoji: Emoji) -> Self {
let Emoji {
id,
name,
category,
aliases,
..
} = emoji;
let request = endpoint::admin::emoji::update::Request {
id,
name,
category,
aliases,
};
EmojiUpdateBuilder { client, request }
}
pub fn as_request(&self) -> &endpoint::admin::emoji::update::Request {
&self.request
}
pub fn name(&mut self, name: impl Into<String>) -> &mut Self {
self.request.name = name.into();
self
}
pub fn set_category(&mut self, category: impl Into<String>) -> &mut Self {
self.request.category.replace(category.into());
self
}
pub fn delete_category(&mut self) -> &mut Self {
self.request.category.take();
self
}
pub fn aliases(&mut self, aliases: impl IntoIterator<Item = impl Into<String>>) -> &mut Self {
self.request.aliases = aliases.into_iter().map(Into::into).collect();
self
}
pub fn add_aliases(
&mut self,
aliases: impl IntoIterator<Item = impl Into<String>>,
) -> &mut Self {
self.request
.aliases
.extend(aliases.into_iter().map(Into::into));
self
}
pub fn add_alias(&mut self, alias: impl Into<String>) -> &mut Self {
self.request.aliases.push(alias.into());
self
}
}
impl<C: Client> EmojiUpdateBuilder<C> {
pub async fn update(&self) -> Result<(), Error<C::Error>> {
self.client
.request(&self.request)
.await
.map_err(Error::Client)?
.into_result()?;
Ok(())
}
}