///|
/// An invite code bound to the REST client that operates on it.
pub struct InviteRef {
  priv client : Client
  priv code : String
}

///|
/// Bind an invite code to this client.
pub fn Client::invite_ref(self : Client, code : String) -> InviteRef {
  { client: self, code, }
}

///|
/// Fetch this invite.
pub async fn InviteRef::fetch(
  self : InviteRef,
  with_counts? : Bool,
  guild_scheduled_event_id? : @model.ScheduledEventId,
) -> @model.Invite raise DiscordHttpError {
  self.client.get_invite(self.code, with_counts?, guild_scheduled_event_id?)
}

///|
/// Delete this invite.
pub async fn InviteRef::delete(
  self : InviteRef,
  reason? : String,
) -> @model.Invite raise DiscordHttpError {
  self.client.delete_invite(self.code, audit_reason?=reason)
}

///|
/// Replace this invite's target users from a CSV file.
pub async fn InviteRef::update_target_users(
  self : InviteRef,
  target_users_file : FileUpload,
) -> Unit raise DiscordHttpError {
  self.client.update_invite_target_users(self.code, target_users_file)
}

///|
/// Fetch this invite's latest target-user update job status.
pub async fn InviteRef::target_users_job_status(
  self : InviteRef,
) -> @model.TargetUsersJobStatus raise DiscordHttpError {
  self.client.get_invite_target_users_job_status(self.code)
}

///|
/// Add one user to this invite's target users.
pub async fn InviteRef::add_target_user(
  self : InviteRef,
  user_id : @model.UserId,
) -> Unit raise DiscordHttpError {
  self.client.add_invite_target_user(self.code, user_id)
}

///|
/// Remove one user from this invite's target users.
pub async fn InviteRef::remove_target_user(
  self : InviteRef,
  user_id : @model.UserId,
) -> Unit raise DiscordHttpError {
  self.client.remove_invite_target_user(self.code, user_id)
}

///|
/// Add up to 1000 users to this invite's target users.
pub async fn InviteRef::bulk_add_target_users(
  self : InviteRef,
  user_ids : Array[@model.UserId],
) -> Unit raise DiscordHttpError {
  self.client.bulk_add_invite_target_users(self.code, user_ids)
}

///|
/// Remove up to 1000 users from this invite's target users.
pub async fn InviteRef::bulk_delete_target_users(
  self : InviteRef,
  user_ids : Array[@model.UserId],
) -> Unit raise DiscordHttpError {
  self.client.bulk_delete_invite_target_users(self.code, user_ids)
}