All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.builder.channel.PermissionOverwritesBuilder.kt Maven / Gradle / Ivy

package dev.kord.rest.builder.channel

import dev.kord.common.annotation.KordDsl
import dev.kord.common.entity.Overwrite
import dev.kord.common.entity.OverwriteType
import dev.kord.common.entity.Snowflake
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract

/**
 * Builder that can modify [permission overwrites][Overwrite].
 */
@KordDsl
public sealed interface PermissionOverwritesBuilder {
    /**
     * Adds [overwrite] to this builder.
     */
    public fun addOverwrite(overwrite: Overwrite)
}

/**
 * [PermissionOverwritesBuilder] which creates an entity with overwrites.
 */
@KordDsl
public interface PermissionOverwritesCreateBuilder : PermissionOverwritesBuilder {
    public var permissionOverwrites: MutableSet

    override fun addOverwrite(overwrite: Overwrite) {
        permissionOverwrites.add(overwrite)
    }
}

/**
 * [PermissionOverwritesBuilder] which modifies an existing entity with overwrites.
 */
@KordDsl
public interface PermissionOverwritesModifyBuilder : PermissionOverwritesBuilder {
    public var permissionOverwrites: MutableSet?

    override fun addOverwrite(overwrite: Overwrite) {
        val overwrites = permissionOverwrites ?: mutableSetOf()
        overwrites.add(overwrite)

        permissionOverwrites = overwrites
    }
}

/**
 * Adds an [Overwrite] for the [memberId].
 */
public inline fun PermissionOverwritesBuilder.addMemberOverwrite(
    memberId: Snowflake,
    builder: PermissionOverwriteBuilder.() -> Unit
) {
    contract {
        callsInPlace(builder, InvocationKind.EXACTLY_ONCE)
    }
    val overwrite = PermissionOverwriteBuilder(OverwriteType.Member, memberId).apply(builder).toOverwrite()

    return addOverwrite(overwrite)
}

/**
 * Adds an [Overwrite] for the [roleId].
 */
public inline fun PermissionOverwritesBuilder.addRoleOverwrite(
    roleId: Snowflake,
    builder: PermissionOverwriteBuilder.() -> Unit
) {
    contract {
        callsInPlace(builder, InvocationKind.EXACTLY_ONCE)
    }
    val overwrite = PermissionOverwriteBuilder(OverwriteType.Role, roleId).apply(builder).toOverwrite()

    return addOverwrite(overwrite)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy