#[cfg(feature = "http")]
use super::Builder;
#[cfg(feature = "http")]
use crate::http::CacheHttp;
#[cfg(feature = "http")]
use crate::internal::prelude::*;
use crate::model::prelude::*;
#[derive(Clone, Debug, Default, Serialize)]
#[must_use]
pub struct EditThread<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
archived: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
auto_archive_duration: Option<AutoArchiveDuration>,
#[serde(skip_serializing_if = "Option::is_none")]
locked: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
invitable: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
rate_limit_per_user: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
flags: Option<ChannelFlags>,
#[serde(skip_serializing_if = "Option::is_none")]
applied_tags: Option<Vec<ForumTagId>>,
#[serde(skip)]
audit_log_reason: Option<&'a str>,
}
impl<'a> EditThread<'a> {
pub fn new() -> Self {
Self::default()
}
pub fn name(mut self, name: impl Into<String>) -> Self {
self.name = Some(name.into());
self
}
pub fn auto_archive_duration(mut self, duration: AutoArchiveDuration) -> Self {
self.auto_archive_duration = Some(duration);
self
}
pub fn archived(mut self, archived: bool) -> Self {
self.archived = Some(archived);
self
}
pub fn locked(mut self, lock: bool) -> Self {
self.locked = Some(lock);
self
}
pub fn invitable(mut self, invitable: bool) -> Self {
self.invitable = Some(invitable);
self
}
pub fn rate_limit_per_user(mut self, rate_limit_per_user: u16) -> Self {
self.rate_limit_per_user = Some(rate_limit_per_user);
self
}
pub fn flags(mut self, flags: ChannelFlags) -> Self {
self.flags = Some(flags);
self
}
pub fn applied_tags(mut self, applied_tags: impl IntoIterator<Item = ForumTagId>) -> Self {
self.applied_tags = Some(applied_tags.into_iter().collect());
self
}
pub fn audit_log_reason(mut self, reason: &'a str) -> Self {
self.audit_log_reason = Some(reason);
self
}
}
#[cfg(feature = "http")]
#[async_trait::async_trait]
impl<'a> Builder for EditThread<'a> {
type Context<'ctx> = ChannelId;
type Built = GuildChannel;
async fn execute(
self,
cache_http: impl CacheHttp,
ctx: Self::Context<'_>,
) -> Result<Self::Built> {
cache_http.http().edit_thread(ctx, &self, self.audit_log_reason).await
}
}