From 3e85714a7548ad0d2ef862441f9cb30e63ac6985 Mon Sep 17 00:00:00 2001 From: Pat Garrity Date: Tue, 12 May 2026 02:56:26 +0000 Subject: [PATCH] (patch) add direct support for vector encoding (#3) Reviewed-on: https://git.garrity.co/garrity-software/gs-std/pulls/3 --- .../main/scala/src/gs/std/v0/core/Base64Encoder.scala | 6 ++++++ .../core/src/main/scala/src/gs/std/v0/core/Blob.scala | 4 +--- .../core/src/main/scala/src/gs/std/v0/core/Encoder.scala | 9 +++++++++ .../src/main/scala/src/gs/std/v0/core/HexEncoder.scala | 6 ++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/modules/core/src/main/scala/src/gs/std/v0/core/Base64Encoder.scala b/modules/core/src/main/scala/src/gs/std/v0/core/Base64Encoder.scala index 9c99fa1..6763d07 100644 --- a/modules/core/src/main/scala/src/gs/std/v0/core/Base64Encoder.scala +++ b/modules/core/src/main/scala/src/gs/std/v0/core/Base64Encoder.scala @@ -9,6 +9,7 @@ import java.util.Base64 * Supports base64-url encoding as well. */ object Base64Encoder extends Encoder[B64]: + private lazy val e: Base64.Encoder = Base64.getEncoder() private lazy val eu: Base64.Encoder = Base64.getUrlEncoder() @@ -17,6 +18,11 @@ object Base64Encoder extends Encoder[B64]: override def encode(input: Array[Byte]): B64 = B64(e.encodeToString(input)) + /** @inheritDocs + */ + override def encode(input: Vector[Byte]): B64 = + B64(e.encodeToString(input.toArray)) + /** Encode the given bytes using base64-url. * * @param input diff --git a/modules/core/src/main/scala/src/gs/std/v0/core/Blob.scala b/modules/core/src/main/scala/src/gs/std/v0/core/Blob.scala index b51d956..d01f9bb 100644 --- a/modules/core/src/main/scala/src/gs/std/v0/core/Blob.scala +++ b/modules/core/src/main/scala/src/gs/std/v0/core/Blob.scala @@ -1,7 +1,5 @@ package gs.std.v0.core -import java.util.Base64 - /** Represents a blob -- some array of bytes. * * @param data @@ -46,4 +44,4 @@ final class Blob(private val data: Array[Byte]) extends IndexedSeq[Byte]: /** @return * This byte array, encoded as a base64 string. */ - def base64(): String = Base64.getEncoder().encodeToString(data) + def base64(): B64 = Base64Encoder.encode(data) diff --git a/modules/core/src/main/scala/src/gs/std/v0/core/Encoder.scala b/modules/core/src/main/scala/src/gs/std/v0/core/Encoder.scala index 1278aeb..88cfeee 100644 --- a/modules/core/src/main/scala/src/gs/std/v0/core/Encoder.scala +++ b/modules/core/src/main/scala/src/gs/std/v0/core/Encoder.scala @@ -15,6 +15,15 @@ trait Encoder[+A <: EncodedString]: */ def encode(input: Array[Byte]): A + /** Encode an immutable array of bytes as a string. + * + * @param input + * The bytes to encode. + * @return + * The encoded string. + */ + def encode(input: Vector[Byte]): A + /** Encode a string as a string. * * @param input diff --git a/modules/core/src/main/scala/src/gs/std/v0/core/HexEncoder.scala b/modules/core/src/main/scala/src/gs/std/v0/core/HexEncoder.scala index 7430199..b6e99de 100644 --- a/modules/core/src/main/scala/src/gs/std/v0/core/HexEncoder.scala +++ b/modules/core/src/main/scala/src/gs/std/v0/core/HexEncoder.scala @@ -5,9 +5,15 @@ import java.util.HexFormat /** Implementation of [[Encoder]] for Hexadecimal strings. */ object HexEncoder extends Encoder[Hex]: + private lazy val h: HexFormat = HexFormat.of() /** @inheritDocs */ override def encode(input: Array[Byte]): Hex = Hex(h.formatHex(input)) + + /** @inheritDocs + */ + override def encode(input: Vector[Byte]): Hex = + Hex(h.formatHex(input.toArray))