11package space.iseki.bencoding
22
3- import kotlinx.serialization.KSerializer
43import kotlinx.serialization.SerialName
54import kotlinx.serialization.Serializable
6- import kotlinx.serialization.decodeFromByteArray
7- import kotlinx.serialization.descriptors.SerialDescriptor
8- import kotlinx.serialization.descriptors.serialDescriptor
9- import kotlinx.serialization.encoding.Decoder
10- import kotlinx.serialization.encoding.Encoder
11- import kotlin.collections.contentEquals
12- import kotlin.collections.contentHashCode
135import kotlin.io.encoding.Base64
146import kotlin.io.encoding.ExperimentalEncodingApi
157import kotlin.js.ExperimentalJsExport
16- import kotlin.js.JsExport
17- import kotlin.let
18- import kotlin.test.Test
198
209@OptIn(ExperimentalJsExport ::class )
2110@Serializable
@@ -28,29 +17,12 @@ data class Meta(
2817 data class Info (
2918 val name : String ,
3019 @SerialName(" piece length" ) val pieceLength : Int ,
31- val pieces : Pieces ,
32- )
33-
34- @Serializable(Pieces .Serializer ::class )
35- class Pieces (private val arr : ByteArray ) {
36- override fun toString (): String = " Pieces(size=${arr.size / 20 } )"
37- override fun hashCode (): Int = arr.contentHashCode()
38- override fun equals (other : Any? ): Boolean = (other as ? Pieces )?.let { it.arr.contentEquals(arr) } ? : false
39-
40- object Serializer : KSerializer<Pieces> {
41- override val descriptor: SerialDescriptor
42- get() = serialDescriptor<String >()
43-
44- override fun deserialize (decoder : Decoder ): Pieces =
45- (decoder as BencodeDecoder ).decodeByteArray().let (::Pieces )
46-
47- override fun serialize (encoder : Encoder , value : Pieces ) {
48- TODO (" Not yet implemented" )
49- }
50-
20+ @BinaryString(BinaryStringStrategy .ISO88591 ) val pieces : String ,
21+ ) {
22+ override fun toString (): String {
23+ return " Info(name='$name ', pieceLength=$pieceLength , pieces=(hash)${pieces.hashCode()} )"
5124 }
5225 }
53-
5426 companion object {
5527
5628 @OptIn(ExperimentalEncodingApi ::class )
0 commit comments