diff options
| author | Austin Hellyer <[email protected]> | 2016-11-13 08:22:24 -0800 |
|---|---|---|
| committer | Austin Hellyer <[email protected]> | 2016-11-13 08:22:24 -0800 |
| commit | f633d1c9603079f584f4f715b308b33c0750ad3a (patch) | |
| tree | f77bc0b630731676be880b11c24b90cffef8c537 /src/utils/builder/create_invite.rs | |
| parent | Don't overflow on message length check (diff) | |
| download | serenity-f633d1c9603079f584f4f715b308b33c0750ad3a.tar.xz serenity-f633d1c9603079f584f4f715b308b33c0750ad3a.zip | |
Move the builders to the utils
The builders aren't a large enough portion of the library to deserve
their own root-level module, so move them to the `utils` module.
Additionally, split them into separate files, as the library will be
receiving more builders and the single-file pattern was getting rather
large.
Diffstat (limited to 'src/utils/builder/create_invite.rs')
| -rw-r--r-- | src/utils/builder/create_invite.rs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/utils/builder/create_invite.rs b/src/utils/builder/create_invite.rs new file mode 100644 index 0000000..55cc1bd --- /dev/null +++ b/src/utils/builder/create_invite.rs @@ -0,0 +1,71 @@ +use serde_json::builder::ObjectBuilder; +use serde_json::Value; +use std::default::Default; + +/// A builder to create a [`RichInvite`] for use via [`Context::create_invite`]. +/// +/// This is a structured and cleaner way of creating an invite, as all +/// parameters are optional. +/// +/// # Examples +/// +/// Create an invite with a max age of 3600 seconds and 10 max uses: +/// +/// ```rust,ignore +/// use serenity::Client; +/// use std::env; +/// +/// let mut client = Client::login_bot(&env::var("DISCORD_BOT_TOKEN").unwrap()); +/// +/// client.on_message(|context, message| { +/// if message.content == "!invite" { +/// let invite = context.create_invite(message.channel_id, |i| i +/// .max_age(3600) +/// .max_uses(10)); +/// } +/// }); +/// ``` +/// +/// [`Context::create_invite`]: ../client/struct.Context.html#method.create_invite +/// [`RichInvite`]: ../model/struct.Invite.html +pub struct CreateInvite(pub ObjectBuilder); + +impl CreateInvite { + /// The duration that the invite will be valid for. + /// + /// Set to `0` for an invite which does not expire after an amount of time. + /// + /// Defaults to `86400`, or 24 hours. + pub fn max_age(self, max_age: u64) -> Self { + CreateInvite(self.0.insert("max_age", max_age)) + } + + /// The number of uses that the invite will be valid for. + /// + /// Set to `0` for an invite which does not expire after a number of uses. + /// + /// Defaults to `0`. + pub fn max_uses(self, max_uses: u64) -> Self { + CreateInvite(self.0.insert("max_uses", max_uses)) + } + + /// Whether an invite grants a temporary membership. + /// + /// Defaults to `false`. + pub fn temporary(self, temporary: bool) -> Self { + CreateInvite(self.0.insert("temporary", temporary)) + } + + /// Whether or not to try to reuse a similar invite. + /// + /// Defaults to `false`. + pub fn unique(self, unique: bool) -> Self { + CreateInvite(self.0.insert("unique", unique)) + } +} + +impl Default for CreateInvite { + fn default() -> CreateInvite { + CreateInvite(ObjectBuilder::new().insert("validate", Value::Null)) + } +} |