Skip to content

Commit 00564a0

Browse files
committed
refactor: remove ContextReceivers
1 parent e35e288 commit 00564a0

File tree

7 files changed

+76
-88
lines changed

7 files changed

+76
-88
lines changed

build.gradle.kts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,6 @@ kotlin {
6464
linuxX64()
6565
linuxArm64()
6666
mingwX64()
67-
68-
sourceSets {
69-
all {
70-
languageSettings {
71-
enableLanguageFeature("ContextReceivers")
72-
}
73-
}
74-
}
7567
}
7668

7769
java {

src/commonMain/kotlin/space/iseki/bencoding/BinaryStringStrategy.kt

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,37 +29,39 @@ enum class BinaryStringStrategy {
2929
/**
3030
* Encode every [Byte] into [Char] directly, so all character must be in code point `0..255`.
3131
*/
32-
Raw,
33-
;
32+
Raw, ;
3433

35-
context(BencodeDecoder)
3634
@OptIn(ExperimentalEncodingApi::class)
37-
internal fun decodeString(strategy: BinaryStringStrategy) = work(
35+
internal fun decodeString(decoder: BencodeDecoder, strategy: BinaryStringStrategy) = work(
3836
strategy = strategy,
39-
options = options,
40-
base64 = { kotlin.io.encoding.Base64.encode(decodeByteArray()) },
41-
raw = { bytes2StringIso88591(decodeByteArray()) },
37+
options = decoder.options,
38+
base64 = { kotlin.io.encoding.Base64.encode(decoder.decodeByteArray()) },
39+
raw = { bytes2StringIso88591(decoder.decodeByteArray()) },
4240
)
4341

44-
context(BencodeEncoder)
4542
@OptIn(ExperimentalEncodingApi::class)
46-
internal fun encodeString(strategy: BinaryStringStrategy, value: String) {
43+
internal fun encodeString(encoder: BencodeEncoder, strategy: BinaryStringStrategy, value: String) {
4744
work(
4845
strategy = strategy,
49-
options = options,
50-
base64 = { encodeByteArray(kotlin.io.encoding.Base64.decode(value)) },
51-
raw = { encodeByteArray(encodeRaw(value)) },
46+
options = encoder.options,
47+
base64 = { encoder.encodeByteArray(kotlin.io.encoding.Base64.decode(value)) },
48+
raw = { encoder.encodeByteArray(encodeRaw(value)) },
5249
)
5350
}
5451

55-
context(BencodeCompositeEncoder)
5652
@OptIn(ExperimentalEncodingApi::class)
57-
internal fun encodeString(strategy: BinaryStringStrategy, descriptor: SerialDescriptor, index: Int, value: String) {
53+
internal fun encodeString(
54+
encoder: BencodeCompositeEncoder,
55+
strategy: BinaryStringStrategy,
56+
descriptor: SerialDescriptor,
57+
index: Int,
58+
value: String,
59+
) {
5860
work(
5961
strategy = strategy,
60-
options = options,
61-
base64 = { encodeByteArrayElement(descriptor, index, kotlin.io.encoding.Base64.decode(value)) },
62-
raw = { encodeByteArrayElement(descriptor, index, encodeRaw(value)) },
62+
options = encoder.options,
63+
base64 = { encoder.encodeByteArrayElement(descriptor, index, kotlin.io.encoding.Base64.decode(value)) },
64+
raw = { encoder.encodeByteArrayElement(descriptor, index, encodeRaw(value)) },
6365
)
6466
}
6567

src/commonMain/kotlin/space/iseki/bencoding/FloatNumberStrategy.kt

Lines changed: 45 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -31,83 +31,80 @@ enum class FloatNumberStrategy {
3131
*/
3232
DecimalString, ;
3333

34-
context(BencodeDecoder)
35-
internal fun decodeDouble(): Double {
34+
internal fun decodeDouble(decoder: BencodeDecoder): Double {
3635
return when (this) {
37-
Disallow -> reportError("Double number is not allowed")
38-
Rounded -> decodeLong().toDouble()
39-
IntegerIEEE754 -> Double.fromBits(decodeLong())
40-
DecimalString -> decodeString().toDouble()
36+
Disallow -> decoder.reportError("Double number is not allowed")
37+
Rounded -> decoder.decodeLong().toDouble()
38+
IntegerIEEE754 -> Double.fromBits(decoder.decodeLong())
39+
DecimalString -> decoder.decodeString().toDouble()
4140
}
4241
}
4342

44-
context(BencodeCompositeDecoder)
45-
internal fun decodeDouble(descriptor: SerialDescriptor, index: Int): Double {
43+
internal fun decodeDouble(decoder: BencodeCompositeDecoder, descriptor: SerialDescriptor, index: Int): Double {
4644
return when (this) {
47-
Disallow -> reportError("Double number is not allowed", descriptor, index)
48-
Rounded -> decodeLongElement(descriptor, index).toDouble()
49-
IntegerIEEE754 -> Double.fromBits(decodeLongElement(descriptor, index))
50-
DecimalString -> decodeStringElement(descriptor, index).toDouble()
45+
Disallow -> decoder.reportError("Double number is not allowed", descriptor, index)
46+
Rounded -> decoder.decodeLongElement(descriptor, index).toDouble()
47+
IntegerIEEE754 -> Double.fromBits(decoder.decodeLongElement(descriptor, index))
48+
DecimalString -> decoder.decodeStringElement(descriptor, index).toDouble()
5149
}
5250
}
5351

54-
context(BencodeDecoder)
55-
internal fun decodeFloat(): Float {
52+
internal fun decodeFloat(decoder: BencodeDecoder): Float {
5653
return when (this) {
57-
Disallow -> reportError("Float number is not allowed")
58-
Rounded -> decodeLong().toFloat()
59-
IntegerIEEE754 -> Float.fromBits(decodeInt())
60-
DecimalString -> decodeString().toFloat()
54+
Disallow -> decoder.reportError("Float number is not allowed")
55+
Rounded -> decoder.decodeLong().toFloat()
56+
IntegerIEEE754 -> Float.fromBits(decoder.decodeInt())
57+
DecimalString -> decoder.decodeString().toFloat()
6158
}
6259
}
6360

64-
context(BencodeCompositeDecoder)
65-
internal fun decodeFloat(descriptor: SerialDescriptor, index: Int): Float {
61+
internal fun decodeFloat(decoder: BencodeCompositeDecoder, descriptor: SerialDescriptor, index: Int): Float {
6662
return when (this) {
67-
Disallow -> reportError("Float number is not allowed", descriptor, index)
68-
Rounded -> decodeLongElement(descriptor, index).toFloat()
69-
IntegerIEEE754 -> Float.fromBits(decodeIntElement(descriptor, index))
70-
DecimalString -> decodeStringElement(descriptor, index).toFloat()
63+
Disallow -> decoder.reportError("Float number is not allowed", descriptor, index)
64+
Rounded -> decoder.decodeLongElement(descriptor, index).toFloat()
65+
IntegerIEEE754 -> Float.fromBits(decoder.decodeIntElement(descriptor, index))
66+
DecimalString -> decoder.decodeStringElement(descriptor, index).toFloat()
7167
}
7268
}
7369

74-
context(BencodeEncoder)
75-
internal fun encodeDouble(value: Double) {
70+
internal fun encodeDouble(encoder: BencodeEncoder, value: Double) {
7671
when (this) {
77-
Disallow -> reportError("Double number is not allowed")
78-
Rounded -> encodeLong(value.toLong())
79-
IntegerIEEE754 -> encodeLong(value.toRawBits())
80-
DecimalString -> encodeString(value.toString())
72+
Disallow -> encoder.reportError("Double number is not allowed")
73+
Rounded -> encoder.encodeLong(value.toLong())
74+
IntegerIEEE754 -> encoder.encodeLong(value.toRawBits())
75+
DecimalString -> encoder.encodeString(value.toString())
8176
}
8277
}
8378

84-
context(BencodeCompositeEncoder)
85-
internal fun encodeDouble(descriptor: SerialDescriptor, index: Int, value: Double) {
79+
internal fun encodeDouble(
80+
encoder: BencodeCompositeEncoder,
81+
descriptor: SerialDescriptor,
82+
index: Int,
83+
value: Double,
84+
) {
8685
when (this) {
87-
Disallow -> reportError("Double number is not allowed", descriptor, index)
88-
Rounded -> encodeLongElement(descriptor, index, value.toLong())
89-
IntegerIEEE754 -> encodeLongElement(descriptor, index, value.toRawBits())
90-
DecimalString -> encodeStringElement(descriptor, index, value.toString())
86+
Disallow -> encoder.reportError("Double number is not allowed", descriptor, index)
87+
Rounded -> encoder.encodeLongElement(descriptor, index, value.toLong())
88+
IntegerIEEE754 -> encoder.encodeLongElement(descriptor, index, value.toRawBits())
89+
DecimalString -> encoder.encodeStringElement(descriptor, index, value.toString())
9190
}
9291
}
9392

94-
context(BencodeEncoder)
95-
internal fun encodeFloat(value: Float) {
93+
internal fun encodeFloat(encoder: BencodeEncoder, value: Float) {
9694
when (this) {
97-
Disallow -> reportError("Float number is not allowed")
98-
Rounded -> encodeLong(value.toLong())
99-
IntegerIEEE754 -> encodeInt(value.toRawBits())
100-
DecimalString -> encodeString(value.toString())
95+
Disallow -> encoder.reportError("Float number is not allowed")
96+
Rounded -> encoder.encodeLong(value.toLong())
97+
IntegerIEEE754 -> encoder.encodeInt(value.toRawBits())
98+
DecimalString -> encoder.encodeString(value.toString())
10199
}
102100
}
103101

104-
context(BencodeCompositeEncoder)
105-
internal fun encodeFloat(descriptor: SerialDescriptor, index: Int, value: Float) {
102+
internal fun encodeFloat(encoder: BencodeCompositeEncoder, descriptor: SerialDescriptor, index: Int, value: Float) {
106103
when (this) {
107-
Disallow -> reportError("Float number is not allowed", descriptor, index)
108-
Rounded -> encodeLongElement(descriptor, index, value.toLong())
109-
IntegerIEEE754 -> encodeIntElement(descriptor, index, value.toRawBits())
110-
DecimalString -> encodeStringElement(descriptor, index, value.toString())
104+
Disallow -> encoder.reportError("Float number is not allowed", descriptor, index)
105+
Rounded -> encoder.encodeLongElement(descriptor, index, value.toLong())
106+
IntegerIEEE754 -> encoder.encodeIntElement(descriptor, index, value.toRawBits())
107+
DecimalString -> encoder.encodeStringElement(descriptor, index, value.toString())
111108
}
112109
}
113110
}

src/commonMain/kotlin/space/iseki/bencoding/internal/BencodeDecoder0.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ internal class BencodeDecoder0(
2424
lexer.pos(), "$kind is not supported"
2525
)
2626

27-
@OptIn(ExperimentalSerializationApi::class)
2827
private fun unsupported(sd: SerialDescriptor, i: Int): Nothing {
2928
throw BencodeDecodeException(lexer.pos(), "type of ${sd.serialName}/${sd.getElementName(i)} is not supported")
3029
}
@@ -39,10 +38,10 @@ internal class BencodeDecoder0(
3938
unsupported(descriptor, index)
4039

4140
override fun decodeFloatElement(descriptor: SerialDescriptor, index: Int): Float =
42-
options.floatStrategy.decodeFloat(descriptor, index)
41+
options.floatStrategy.decodeFloat(this, descriptor, index)
4342

4443
override fun decodeDoubleElement(descriptor: SerialDescriptor, index: Int): Double =
45-
options.doubleStrategy.decodeDouble(descriptor, index)
44+
options.doubleStrategy.decodeDouble(this, descriptor, index)
4645

4746
override fun decodeByteArrayElement(descriptor: SerialDescriptor, index: Int) =
4847
el(descriptor, index, ::decodeByteArray)
@@ -88,9 +87,9 @@ internal class BencodeDecoder0(
8887
override fun decodeBoolean(): Boolean = unsupported("boolean")
8988
override fun decodeByte(): Byte = decodeInt().toByte()
9089
override fun decodeChar(): Char = decodeInt().toChar()
91-
override fun decodeDouble(): Double = options.doubleStrategy.decodeDouble()
90+
override fun decodeDouble(): Double = options.doubleStrategy.decodeDouble(this)
9291
override fun decodeEnum(enumDescriptor: SerialDescriptor) = enumDescriptor.getElementIndex(decodeString())
93-
override fun decodeFloat(): Float = options.floatStrategy.decodeFloat()
92+
override fun decodeFloat(): Float = options.floatStrategy.decodeFloat(this)
9493
override fun decodeInline(descriptor: SerialDescriptor): Decoder = this
9594
override fun decodeInt(): Int = lexer.nextInteger().toInt()
9695
override fun decodeLong(): Long = lexer.nextInteger()
@@ -99,7 +98,7 @@ internal class BencodeDecoder0(
9998
override fun decodeShort(): Short = decodeInt().toShort()
10099
override fun decodeString(): String = lexer.nextBytes().decodeToString()
101100
override fun decodeBinaryString(strategy: BinaryStringStrategy): String =
102-
options.binaryStringStrategy.decodeString(strategy)
101+
options.binaryStringStrategy.decodeString(this, strategy)
103102

104103
override fun reportError(message: String): Nothing {
105104
throw BencodeDecodeException(lexer.pos(), message)

src/commonMain/kotlin/space/iseki/bencoding/internal/CompositeEncoderDelegate.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ internal interface CompositeEncoderDelegate : BencodeCompositeEncoder {
3939
}
4040

4141
override fun encodeFloatElement(descriptor: SerialDescriptor, index: Int, value: Float) {
42-
options.floatStrategy.encodeFloat(descriptor, index, value)
42+
options.floatStrategy.encodeFloat(this, descriptor, index, value)
4343
}
4444

4545
override fun encodeDoubleElement(descriptor: SerialDescriptor, index: Int, value: Double) {
46-
options.doubleStrategy.encodeDouble(descriptor, index, value)
46+
options.doubleStrategy.encodeDouble(this, descriptor, index, value)
4747
}
4848

4949
override fun encodeBooleanElement(descriptor: SerialDescriptor, index: Int, value: Boolean) {
@@ -98,7 +98,7 @@ internal interface CompositeEncoderDelegate : BencodeCompositeEncoder {
9898
strategy: BinaryStringStrategy,
9999
value: String
100100
) {
101-
options.binaryStringStrategy.encodeString(strategy, descriptor, index, value)
101+
options.binaryStringStrategy.encodeString(this, strategy, descriptor, index, value)
102102
}
103103

104104
private fun throwForbiddenCallToBeginStructure(descriptor: SerialDescriptor, index: Int): Nothing {

src/commonMain/kotlin/space/iseki/bencoding/internal/EncoderDelegate.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ internal interface EncoderDelegate : BencodeEncoder {
2020
override fun encodeByte(value: Byte) = encodeLong(value.toLong())
2121
override fun encodeShort(value: Short) = encodeLong(value.toLong())
2222
override fun encodeInt(value: Int) = encodeLong(value.toLong())
23-
override fun encodeFloat(value: Float) = options.floatStrategy.encodeFloat(value)
24-
override fun encodeDouble(value: Double) = options.doubleStrategy.encodeDouble(value)
23+
override fun encodeFloat(value: Float) = options.floatStrategy.encodeFloat(this, value)
24+
override fun encodeDouble(value: Double) = options.doubleStrategy.encodeDouble(this, value)
2525
override fun encodeBoolean(value: Boolean) = reportError("boolean is not supported")
2626

2727
@OptIn(ExperimentalSerializationApi::class)
@@ -30,7 +30,7 @@ internal interface EncoderDelegate : BencodeEncoder {
3030
}
3131

3232
override fun encodeBinaryString(strategy: BinaryStringStrategy, value: String) {
33-
options.binaryStringStrategy.encodeString(strategy, value)
33+
options.binaryStringStrategy.encodeString(this, strategy, value)
3434
}
3535

3636
@ExperimentalSerializationApi

src/commonMain/kotlin/space/iseki/bencoding/internal/MapKeyExtractorEncoder.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@ internal class MapKeyExtractorEncoder(
2424
}
2525

2626
override fun encodeBinaryString(strategy: BinaryStringStrategy, value: String) {
27-
options.binaryStringStrategy.encodeString(strategy, value)
27+
options.binaryStringStrategy.encodeString(this, strategy, value)
2828
}
2929

3030
var key: String? = null
3131

32-
@OptIn(ExperimentalSerializationApi::class)
3332
private fun keyMustBeString(): Nothing =
3433
parent.reportError("key must be string(in ${descriptor.serialName}/[$index]${descriptor.getElementName(index)})")
3534

@@ -53,7 +52,6 @@ internal class MapKeyExtractorEncoder(
5352
keyMustBeString()
5453
}
5554

56-
@OptIn(ExperimentalSerializationApi::class)
5755
override fun encodeEnum(enumDescriptor: SerialDescriptor, index: Int) {
5856
encodeString(enumDescriptor.getElementName(index))
5957
}

0 commit comments

Comments
 (0)