Skip to content

Commit 14981eb

Browse files
committed
Implement ByteString factory accepting UBytes
Fixes #389
1 parent eb7a5d2 commit 14981eb

File tree

5 files changed

+40
-0
lines changed

5 files changed

+40
-0
lines changed

bytestring/api/kotlinx-io-bytestring.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ public final class kotlinx/io/bytestring/ByteStringJvmExtKt {
6969
}
7070

7171
public final class kotlinx/io/bytestring/ByteStringKt {
72+
public static final fun ByteString ()Lkotlinx/io/bytestring/ByteString;
7273
public static final fun ByteString ([B)Lkotlinx/io/bytestring/ByteString;
74+
public static final fun ByteString-GBYM_sE ([B)Lkotlinx/io/bytestring/ByteString;
7375
public static final fun contentEquals (Lkotlinx/io/bytestring/ByteString;[B)Z
7476
public static final fun decodeToString (Lkotlinx/io/bytestring/ByteString;)Ljava/lang/String;
7577
public static final fun encodeToByteString (Ljava/lang/String;)Lkotlinx/io/bytestring/ByteString;

bytestring/api/kotlinx-io-bytestring.klib.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,7 @@ final fun (kotlinx.io.bytestring/ByteStringBuilder).kotlinx.io.bytestring/append
8080
final fun (kotlinx.io.bytestring/ByteStringBuilder).kotlinx.io.bytestring/append(kotlin/UByte) // kotlinx.io.bytestring/append|[email protected](kotlin.UByte){}[0]
8181
final fun (kotlinx.io.bytestring/ByteStringBuilder).kotlinx.io.bytestring/append(kotlinx.io.bytestring/ByteString) // kotlinx.io.bytestring/append|[email protected](kotlinx.io.bytestring.ByteString){}[0]
8282
final fun <#A: kotlin.text/Appendable> (kotlin.io.encoding/Base64).kotlinx.io.bytestring/encodeToAppendable(kotlinx.io.bytestring/ByteString, #A, kotlin/Int = ..., kotlin/Int = ...): #A // kotlinx.io.bytestring/encodeToAppendable|[email protected](kotlinx.io.bytestring.ByteString;0:0;kotlin.Int;kotlin.Int){0§<kotlin.text.Appendable>}[0]
83+
final fun kotlinx.io.bytestring/ByteString(): kotlinx.io.bytestring/ByteString // kotlinx.io.bytestring/ByteString|ByteString(){}[0]
8384
final fun kotlinx.io.bytestring/ByteString(kotlin/ByteArray...): kotlinx.io.bytestring/ByteString // kotlinx.io.bytestring/ByteString|ByteString(kotlin.ByteArray...){}[0]
85+
final fun kotlinx.io.bytestring/ByteString(kotlin/UByteArray...): kotlinx.io.bytestring/ByteString // kotlinx.io.bytestring/ByteString|ByteString(kotlin.UByteArray...){}[0]
8486
final inline fun kotlinx.io.bytestring/buildByteString(kotlin/Int = ..., kotlin/Function1<kotlinx.io.bytestring/ByteStringBuilder, kotlin/Unit>): kotlinx.io.bytestring/ByteString // kotlinx.io.bytestring/buildByteString|buildByteString(kotlin.Int;kotlin.Function1<kotlinx.io.bytestring.ByteStringBuilder,kotlin.Unit>){}[0]

bytestring/common/src/ByteString.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
package kotlinx.io.bytestring
2323

24+
import kotlin.js.JsName
2425
import kotlin.math.max
2526
import kotlin.math.min
2627

@@ -37,6 +38,23 @@ public fun ByteString(vararg bytes: Byte): ByteString = if (bytes.isEmpty()) {
3738
ByteString.wrap(bytes)
3839
}
3940

41+
/**
42+
* Wraps given [bytes] into a byte string.
43+
*
44+
* @param bytes a sequence of bytes to be wrapped.
45+
*
46+
* @sample kotlinx.io.bytestring.samples.ByteStringSamples.constructionFromUBytesSample
47+
*/
48+
@OptIn(ExperimentalUnsignedTypes::class)
49+
public fun ByteString(vararg bytes: UByte): ByteString = if (bytes.isEmpty()) {
50+
ByteString.EMPTY
51+
} else {
52+
ByteString.wrap(bytes.asByteArray())
53+
}
54+
55+
@JsName("EmptyByteString")
56+
public fun ByteString(): ByteString = ByteString.EMPTY
57+
4058
/**
4159
* An immutable wrapper around a byte sequence providing [String] like functionality.
4260
*

bytestring/common/test/ByteStringTest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,14 @@ class ByteStringTest {
410410
assertFalse(ByteString(1, 2, 3, 4, 5).contentEquals(byteArrayOf(1, 2, 3, 4, 5, 6)))
411411
assertFalse(ByteString(1, 2, 3, 4, 5, 6).contentEquals(byteArrayOf(1, 2, 3, 4, 5)))
412412
}
413+
414+
@OptIn(ExperimentalUnsignedTypes::class)
415+
@Test
416+
fun fromUBytes() {
417+
val str = ByteString(0xDEu, 0xADu, 0xC0u, 0xDEu)
418+
assertContentEquals(
419+
byteArrayOf(0xDE.toByte(), 0xAD.toByte(), 0xC0u.toByte(), 0xDEu.toByte()),
420+
str.toByteArray()
421+
)
422+
}
413423
}

bytestring/common/test/samples/samples.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,14 @@ class ByteStringSamples {
199199
assertEquals(3, byteStringFromBytes.size)
200200
}
201201

202+
@OptIn(ExperimentalUnsignedTypes::class)
203+
@Test
204+
fun constructionFromUBytesSample() {
205+
val byteStringFromBytes = ByteString(0xCAu, 0xFEu)
206+
assertFalse(byteStringFromBytes.isEmpty())
207+
assertEquals(2, byteStringFromBytes.size)
208+
}
209+
202210
@Test
203211
fun encodeAndDecodeUtf8String() {
204212
val helloAsByteString = "hello".encodeToByteString()

0 commit comments

Comments
 (0)