Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explicit api for all modules (and small changes on the way) #474

Merged
merged 144 commits into from
Jan 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
38675ff
Remove no longer necessary experimental annotations
lukellmann Dec 30, 2021
22df84b
Move top-level test json.MessageTest.`User serialization` into class …
lukellmann Dec 30, 2021
e999eef
Move top-level tests in EmojiTest.kt into class json.EmojiTest and ma…
lukellmann Dec 30, 2021
223aa15
Move top-level tests in GuildTest.kt into class json.GuildTest and ma…
lukellmann Dec 30, 2021
7c8e5ca
Opt-in to experimental contracts for all modules
lukellmann Dec 30, 2021
e4ef825
explicitApi for all modules
lukellmann Dec 31, 2021
c4bfd21
explicitApi for Color
lukellmann Dec 31, 2021
8b6612b
explicitApi for Annotations
lukellmann Dec 31, 2021
d312396
explicitApi for AuditLog
lukellmann Dec 31, 2021
3954477
explicitApi for RateLimiter
lukellmann Dec 31, 2021
b7af632
explicitApi for DiscordPinsUpdateData and DiscordTyping
lukellmann Dec 31, 2021
4f45c59
explicitApi for DiscordActivity
lukellmann Dec 31, 2021
3914475
explicitApi for DiscordBitSet
lukellmann Dec 31, 2021
e958299
explicitApi for DiscordChannel
lukellmann Dec 31, 2021
a180cf5
explicitApi for DiscordComponent
lukellmann Dec 31, 2021
3f9877b
explicitApi for DiscordConnection
lukellmann Dec 31, 2021
4bae041
explicitApi for DiscordEmoji
lukellmann Dec 31, 2021
ff7a916
explicitApi for DiscordGuild
lukellmann Dec 31, 2021
aca7da8
explicitApi for DiscordGuildScheduledEvent and DiscordGuildWidget
lukellmann Dec 31, 2021
aa42ee7
explicitApi for DiscordIntegration
lukellmann Dec 31, 2021
2e9dc8c
explicitApi for DiscordInvite
lukellmann Dec 31, 2021
e4704f1
explicitApi for DiscordMessage
lukellmann Dec 31, 2021
4277150
explicitApi for DiscordNull and DiscordRole
lukellmann Dec 31, 2021
f00a16e
explicitApi for DiscordSelectOption, DiscordShard and DiscordStageIns…
lukellmann Dec 31, 2021
f16bfb6
explicitApi for DiscordTemplate and DiscordTimestamp
lukellmann Dec 31, 2021
c993f62
explicitApi for DiscordUser
lukellmann Dec 31, 2021
8950214
explicitApi for DiscordWebhook
lukellmann Dec 31, 2021
3469c67
explicitApi for Interactions
lukellmann Dec 31, 2021
6be3aac
explicitApi for Invite and Member
lukellmann Dec 31, 2021
0ae780a
explicitApi for Optional
lukellmann Dec 31, 2021
bc9ef54
explicitApi for Optional
lukellmann Dec 31, 2021
55d8857
explicitApi for OptionalDelegates
lukellmann Dec 31, 2021
ad3f63c
explicitApi for OptionalInt
lukellmann Dec 31, 2021
155363d
explicitApi for OptionalLong
lukellmann Dec 31, 2021
8f987a1
explicitApi for OptionalSnowflake
lukellmann Dec 31, 2021
e21b40c
explicitApi for Permission
lukellmann Dec 31, 2021
0bf10e4
explicitApi for Presence
lukellmann Dec 31, 2021
f408d3d
explicitApi for RequestException
lukellmann Dec 31, 2021
a2ca191
explicitApi for Snowflake
lukellmann Dec 31, 2021
2d0a07a
explicitApi for Team
lukellmann Dec 31, 2021
9154184
explicitApi for Command
lukellmann Dec 31, 2021
99e9721
explicitApi for RateLimiter
lukellmann Dec 31, 2021
9d84285
explicitApi for ActionRowBuilder
lukellmann Dec 31, 2021
48ff44c
explicitApi for AllowedMentionsBuilder
lukellmann Dec 31, 2021
b96edd8
explicitApi for MessageCreateBuilders
lukellmann Dec 31, 2021
c749c72
explicitApi for AuditLogGetRequestBuilder
lukellmann Dec 31, 2021
013a243
explicitApi for GatewayConfiguration
lukellmann Dec 31, 2021
16fce29
explicitApi for Gateway
lukellmann Dec 31, 2021
dc909a6
explicitApi for GuildChannelPositionModifyBuilder
lukellmann Dec 31, 2021
3cd50a0
explicitApi for GuildRequests
lukellmann Dec 31, 2021
a84f29f
explicitApi for OptionsBuilder
lukellmann Dec 31, 2021
dcce9ed
explicitApi for KtorRequestHandler
lukellmann Dec 31, 2021
ecb5b9b
explicitApi for RequestBuilder
lukellmann Dec 31, 2021
6fc4683
explicitApi for RestClient / RestService
lukellmann Dec 31, 2021
6bc71c2
explicitApi for RoleCreateBuilder
lukellmann Dec 31, 2021
5164091
explicitApi for Event
lukellmann Dec 31, 2021
ce07e01
explicitApi for ApplicationCommandBuilders
lukellmann Dec 31, 2021
e0df398
explicitApi for ApplicationInfoResponse, ApplicationService, AuditLog…
lukellmann Dec 31, 2021
10f11d7
explicitApi for BanCreateBuilder, BanResponse
lukellmann Dec 31, 2021
e53041b
explicitApi for ButtonBuilder
lukellmann Dec 31, 2021
61b4aaa
explicitApi for CategoryCreateBuilder, CategoryModifyBuilder
lukellmann Dec 31, 2021
e519333
explicitApi for CdnUrl, Channel, ChannelFollowRequest, ChannelPermiss…
lukellmann Dec 31, 2021
2683f2d
explicitApi for ChannelService
lukellmann Dec 31, 2021
a5fec1b
explicitApi for HttpUtils
lukellmann Dec 31, 2021
1deebb1
explicitApi for ComponentBuilders
lukellmann Dec 31, 2021
f1fee67
explicitApi for Connection, CurrentUserModifyBuilder and CurrentUserN…
lukellmann Dec 31, 2021
990f5b1
explicitApi for DiscordCdn
lukellmann Dec 31, 2021
003bd50
explicitApi for DiscordErrorResponse and EditGuildChannelBuilder
lukellmann Dec 31, 2021
4859173
explicitApi for EmbedBuilder and EmbedResponse
lukellmann Dec 31, 2021
e9e0ca2
explicitApi for EmojiCreateBuilder, EmojiModifyBuilder, EmojiRequests…
lukellmann Dec 31, 2021
05fbe0d
explicitApi for FollowedChannelResponse, FollowupMessageModifyBuilder…
lukellmann Dec 31, 2021
f96eef0
explicitApi for FollowedChannelResponse, FollowupMessageModifyBuilder…
lukellmann Dec 31, 2021
2d7ceb1
explicitApi for GuildModifyBuilder
lukellmann Dec 31, 2021
bd70c74
explicitApi for GuildService
lukellmann Dec 31, 2021
fc9538a
explicitApi for Image
lukellmann Dec 31, 2021
13a813f
explicitApi for InputChatBuilders
lukellmann Jan 1, 2022
b801260
explicitApi for IntegrationModifyBuilder and InteractionResponseModif…
lukellmann Jan 1, 2022
c4342b4
explicitApi for Intent
lukellmann Jan 1, 2022
41c6902
explicitApi for InteractionService
lukellmann Jan 1, 2022
9e0120a
explicitApi for InteractionsRequests
lukellmann Jan 1, 2022
2fcd450
explicitApi for InviteCreateBuilder, InviteCreateRequest and InviteSe…
lukellmann Jan 1, 2022
75da90e
add new error codes and explicitApi for JsonErrorCode
lukellmann Jan 1, 2022
05d8790
explicitApi for Retry and LinearRetry
lukellmann Jan 1, 2022
16fc655
explicitApi for LoginBuilder
lukellmann Jan 1, 2022
dacb5c0
explicitApi for MemberAddBuilder and MemberModifyBuilder
lukellmann Jan 1, 2022
ad45ee6
explicitApi for MessageCommandBuilders
lukellmann Jan 1, 2022
4e23870
explicitApi for MessageModifyBuilder, UserMessageModifyBuilder and We…
lukellmann Jan 1, 2022
ae0d141
explicitApi for MessageRequests
lukellmann Jan 1, 2022
a70c03a
explicitApi for MultiApplicationCommandBuilder
lukellmann Jan 1, 2022
af038ba
explicitApi for NamedFile
lukellmann Jan 1, 2022
4437ceb
explicitApi for NewsChannelCreateBuilder
lukellmann Jan 1, 2022
318ce1e
explicitApi for OpCode
lukellmann Jan 1, 2022
e76ff57
explicitApi for PermissionOverwriteBuilder, PermissionOverwritesBuild…
lukellmann Jan 1, 2022
88be02b
explicitApi for Position, PresenceBuilder and Prune
lukellmann Jan 1, 2022
4411c7a
explicitApi for Request
lukellmann Jan 1, 2022
6bcc320
explicitApi for RequestBuilder
lukellmann Jan 1, 2022
5f6ce74
explicitApi for RequestHandler and RestRequestException
lukellmann Jan 1, 2022
9b0de8e
explicitApi for Route
lukellmann Jan 2, 2022
371edc4
move companion object, Key class and NoStrategy up in Route.kt for be…
lukellmann Jan 2, 2022
a4fb113
Group routes similar to docs
lukellmann Jan 2, 2022
56d71e0
explicitApi for RequestGuildMembersBuilder
lukellmann Jan 2, 2022
61771d0
explicitApi for RoleModifyBuilder and RolePositionsModifyBuilder
lukellmann Jan 2, 2022
66a7ac2
explicitApi for ScheduledEventCreateBuilder, ScheduledEventModifyBuil…
lukellmann Jan 2, 2022
bb0bd5a
explicitApi for SelectOptionBuilder
lukellmann Jan 2, 2022
d86d1f1
explicitApi for StageInstanceRequests and StageInstanceService.kt
lukellmann Jan 2, 2022
28863d5
explicitApi for StartThreadBuilder and StartThreadWithMessageBuilder
lukellmann Jan 2, 2022
838eb86
explicitApi for TemplateBuilders, TemplateRequests and TemplateService
lukellmann Jan 2, 2022
7fbf7ca
explicitApi for ThreadModifyBuilder, Ticker and UserCommandBuilders
lukellmann Jan 2, 2022
b331eaf
explicitApi for UserRequests and UserService
lukellmann Jan 2, 2022
4e3b9f5
explicitApi for VoiceService, VoiceStateModifyBuilder and VoiceStateR…
lukellmann Jan 2, 2022
a241e97
explicitApi for WidgetModifyBuilder
lukellmann Jan 2, 2022
ade1208
remove unnecessary constructor keywords
lukellmann Jan 2, 2022
1bc6824
explicitApi for WebhookCreateBuilder, WebhookModifyBuilder, WebhookRe…
lukellmann Jan 2, 2022
0b663e3
* fix ExceptionInInitializerError in AuditLogChangeKey.Serializer cau…
lukellmann Jan 2, 2022
e329580
Merge branch '0.8.x' into explicit-api
lukellmann Jan 2, 2022
6dd38e2
revert change in NotSerializable
lukellmann Jan 2, 2022
0e17b3a
Interactions models as data classes
lukellmann Jan 2, 2022
499534d
public (De-)SerializationStrategies
lukellmann Jan 2, 2022
535f6d5
DiscordClose as data class
lukellmann Jan 2, 2022
9d97944
no data class for UrlFormatBuilder
lukellmann Jan 3, 2022
3401c30
Merge branch '0.8.x' into explicit-api
lukellmann Jan 13, 2022
ebc0f37
Restore explicit api after merge
lukellmann Jan 13, 2022
8166a96
Revert "add new error codes and explicitApi for JsonErrorCode"
lukellmann Jan 13, 2022
5d18623
explicitApi for JsonErrorCode after revert (changes in https://github…
lukellmann Jan 13, 2022
7d7d1cc
Revert making serializers internal (will be in future PR)
lukellmann Jan 13, 2022
5abaf6b
Forgot some
lukellmann Jan 13, 2022
87915e4
Remove unused logger
lukellmann Jan 14, 2022
6deb2a2
Merge branch '0.8.x' into explicit-api
lukellmann Jan 15, 2022
67a7c11
Restore explicit api after merge
lukellmann Jan 15, 2022
aa1c9d5
Merge branch '0.8.x' into explicit-api
lukellmann Jan 16, 2022
0024fbc
Restore public api after merge
lukellmann Jan 16, 2022
47af12c
restore shards field for GatewayResponse, fixed in other PR
lukellmann Jan 18, 2022
75b06c8
Merge branch '0.8.x' into explicit-api
lukellmann Jan 18, 2022
6c8ebbc
Restore explicit api after merge
lukellmann Jan 18, 2022
36be5fe
Merge branch '0.8.x' into explicit-api
lukellmann Jan 21, 2022
f462abc
Restore explicit api after merge
lukellmann Jan 21, 2022
330f85c
Merge branch '0.8.x' into explicit-api
lukellmann Jan 24, 2022
54a56a5
SelectMenuComponent.disabled doc
lukellmann Jan 24, 2022
b2fff19
Locale doc
lukellmann Jan 24, 2022
bfb4116
Merge branch '0.8.x' into explicit-api
lukellmann Jan 29, 2022
9cbc0f0
Restore explicit api after merge
lukellmann Jan 29, 2022
66afcfb
Revert "Remove unused logger"
lukellmann Jan 29, 2022
42608c3
typo
lukellmann Jan 29, 2022
6def871
Merge branch '0.8.x' into explicit-api
HopeBaron Jan 29, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ repositories {
}

dependencies {
// We currently cannot use Kotlin 1.5.31: https://github.com/kordlib/kord/issues/399
implementation(kotlin("gradle-plugin", version = "1.6.10"))
implementation(kotlin("serialization", version = "1.6.10"))
implementation("org.jetbrains.dokka", "dokka-gradle-plugin", "1.6.0")
Expand Down
4 changes: 4 additions & 0 deletions buildSrc/src/main/kotlin/kord-module.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ dependencies {
testRuntimeOnly(kotlin("test-junit5"))
}

kotlin {
explicitApi()
}

tasks {
tasks.getByName("apiCheck") {
onlyIf { Library.isRelease }
Expand Down
16 changes: 8 additions & 8 deletions common/src/main/kotlin/Color.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ import kotlinx.serialization.encoding.Encoder


@Serializable(with = Color.Serializer::class)
class Color(rgb: Int) {
constructor(red: Int, green: Int, blue: Int) : this(rgb(red, green, blue))
public class Color(rgb: Int) {
public constructor(red: Int, green: Int, blue: Int) : this(rgb(red, green, blue))

val rgb = rgb and 0xFFFFFF
public val rgb: Int = rgb and 0xFFFFFF

val red: Int get() = (rgb shr 16) and 0xFF
val green: Int get() = (rgb shr 8) and 0xFF
val blue: Int get() = (rgb shr 0) and 0xFF
public val red: Int get() = (rgb shr 16) and 0xFF
public val green: Int get() = (rgb shr 8) and 0xFF
public val blue: Int get() = (rgb shr 0) and 0xFF

init {
require(this.rgb in MIN_COLOR..MAX_COLOR) { "RGB should be in range of $MIN_COLOR..$MAX_COLOR but was ${this.rgb}" }
Expand All @@ -33,7 +33,7 @@ class Color(rgb: Int) {
return color.rgb == rgb
}

companion object {
public companion object {
private const val MIN_COLOR = 0
private const val MAX_COLOR = 0xFFFFFF
}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

public for .serializer()

Expand Down Expand Up @@ -61,4 +61,4 @@ private fun rgb(red: Int, green: Int, blue: Int): Int {
(blue and 0xFF) shl 0
}

val java.awt.Color.kColor get() = Color(rgb)
public val java.awt.Color.kColor: Color get() = Color(rgb)
37 changes: 18 additions & 19 deletions common/src/main/kotlin/DiscordBitSet.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,27 @@ import kotlin.math.min

private const val SAFE_LENGTH = 19
private const val WIDTH = Byte.SIZE_BITS
fun EmptyBitSet() = DiscordBitSet(0)

@OptIn(ExperimentalUnsignedTypes::class)
@Suppress("FunctionName")
public fun EmptyBitSet(): DiscordBitSet = DiscordBitSet(0)

@Serializable(with = DiscordBitSetSerializer::class)
class DiscordBitSet(internal var data: LongArray) {
public class DiscordBitSet(internal var data: LongArray) {

val isEmpty: Boolean
public val isEmpty: Boolean
get() = data.all { it == 0L }

val value: String
public val value: String
get() {
val buffer = ByteBuffer.allocate(data.size * Long.SIZE_BYTES)
buffer.asLongBuffer().put(data.reversedArray())
return BigInteger(buffer.array()).toString()
}

val size: Int
public val size: Int
get() = data.size * WIDTH

val binary: String
public val binary: String
get() = data.joinToString("") { it.toULong().toString(2) }.reversed().padEnd(8, '0')

override fun equals(other: Any?): Boolean {
Expand All @@ -46,54 +47,54 @@ class DiscordBitSet(internal var data: LongArray) {

private fun getOrZero(i: Int) = data.getOrNull(i) ?: 0L

operator fun get(index: Int): Boolean {
public operator fun get(index: Int): Boolean {
if (index !in 0 until size) return false
val indexOfWidth = index / WIDTH
val bitIndex = index % WIDTH
return data[indexOfWidth] and (1L shl bitIndex) != 0L
}

operator fun contains(other: DiscordBitSet): Boolean {
public operator fun contains(other: DiscordBitSet): Boolean {
if (other.size > size) return false
for (i in other.data.indices) {
if (data[i] and other.data[i] != other.data[i]) return false
}
return true
}

operator fun set(index: Int, value: Boolean) {
public operator fun set(index: Int, value: Boolean) {
if (index !in 0 until size) data.copyOf((63 + index) / WIDTH)
val indexOfWidth = index / WIDTH
val bitIndex = index % WIDTH
val bit = if (value) 1L else 0L
data[index] = data[indexOfWidth] or (bit shl bitIndex)
}

operator fun plus(another: DiscordBitSet): DiscordBitSet {
public operator fun plus(another: DiscordBitSet): DiscordBitSet {
val dist = LongArray(data.size)
data.copyInto(dist)
val copy = DiscordBitSet(dist)
copy.add(another)
return copy
}

operator fun minus(another: DiscordBitSet): DiscordBitSet {
public operator fun minus(another: DiscordBitSet): DiscordBitSet {
val dist = LongArray(data.size)
data.copyInto(dist)
val copy = DiscordBitSet(dist)
copy.remove(another)
return copy
}

fun add(another: DiscordBitSet) {
public fun add(another: DiscordBitSet) {
if (another.data.size > data.size) data = data.copyOf(another.data.size)
for (i in another.data.indices) {
data[i] = data[i] or another.data[i]
}
}


fun remove(another: DiscordBitSet) {
public fun remove(another: DiscordBitSet) {
for (i in 0 until min(data.size, another.data.size)) {
data[i] = data[i] xor (data[i] and another.data[i])
}
Expand All @@ -111,11 +112,11 @@ class DiscordBitSet(internal var data: LongArray) {

}

fun DiscordBitSet(vararg widths: Long): DiscordBitSet {
public fun DiscordBitSet(vararg widths: Long): DiscordBitSet {
return DiscordBitSet(widths)
}

fun DiscordBitSet(value: String): DiscordBitSet {
public fun DiscordBitSet(value: String): DiscordBitSet {
if (value.length <= SAFE_LENGTH) {// fast path
return DiscordBitSet(longArrayOf(value.toULong().toLong()))
}
Expand All @@ -140,7 +141,7 @@ fun DiscordBitSet(value: String): DiscordBitSet {
}


object DiscordBitSetSerializer : KSerializer<DiscordBitSet> {
public object DiscordBitSetSerializer : KSerializer<DiscordBitSet> {
override val descriptor: SerialDescriptor
get() = PrimitiveSerialDescriptor("DiscordBitSet", PrimitiveKind.STRING)

Expand All @@ -150,7 +151,5 @@ object DiscordBitSetSerializer : KSerializer<DiscordBitSet> {

override fun serialize(encoder: Encoder, value: DiscordBitSet) {
encoder.encodeString(value.value)

}
}

4 changes: 2 additions & 2 deletions common/src/main/kotlin/DiscordTimestamp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package dev.kord.common

import kotlinx.datetime.Instant

fun Instant.toMessageFormat(style: DiscordTimestampStyle = DiscordTimestampStyle.ShortDateTime) =
public fun Instant.toMessageFormat(style: DiscordTimestampStyle = DiscordTimestampStyle.ShortDateTime): String =
"<t:$epochSeconds:${style.style}>"

/**
* The class representing the [style of a timestamp](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles)
*/
enum class DiscordTimestampStyle(val style: String) {
public enum class DiscordTimestampStyle(public val style: String) {

/**
* For example 16:20
Expand Down
Loading