This is an automated email from the ASF dual-hosted git repository.

pjfanning pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko-grpc.git


The following commit(s) were added to refs/heads/main by this push:
     new 10ff8fcf csvparser util for headers (#852)
10ff8fcf is described below

commit 10ff8fcf4ad54791df5d97650a3d80a41bdacaa4
Author: PJ Fanning <[email protected]>
AuthorDate: Thu Aug 20 14:27:59 2026 +0100

    csvparser util for headers (#852)
    
    * csvparser util for headers
    
    * Update headers.scala
---
 .../apache/pekko/grpc/scaladsl/headers/headers.scala  | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git 
a/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/headers/headers.scala 
b/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/headers/headers.scala
index a70437ae..f502ea1a 100644
--- 
a/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/headers/headers.scala
+++ 
b/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/headers/headers.scala
@@ -24,6 +24,14 @@ import scala.collection.immutable
 import scala.annotation.nowarn
 import scala.util.Try
 
+/**
+ * Simple CSV parser for HTTP header values. Not meant to be a full CSV parser,
+ * just enough to parse the headers we care about.
+ */
+private object SimpleCSVParser {
+  def parse(value: String): Array[String] = value.split(',').map(_.trim)
+}
+
 @ApiMayChange
 final class `Message-Accept-Encoding`(override val value: String)
     extends ModeledCustomHeader[`Message-Accept-Encoding`] {
@@ -32,7 +40,7 @@ final class `Message-Accept-Encoding`(override val value: 
String)
   @nowarn("msg=the inferred type changes")
   override val companion = `Message-Accept-Encoding`
 
-  lazy val values: Array[String] = value.split(',')
+  lazy val values: Array[String] = SimpleCSVParser.parse(value)
 }
 
 @ApiMayChange
@@ -44,7 +52,9 @@ object `Message-Accept-Encoding` extends 
ModeledCustomHeaderCompanion[`Message-A
     Try(new `Message-Accept-Encoding`(value))
 
   def findIn(headers: Iterable[jm.HttpHeader]): Array[String] =
-    headers.collectFirst { case h if h.is(name) => 
h.value().split(',').map(_.trim) }.getOrElse(Array.empty)
+    headers.collectFirst {
+      case h if h.is(name) => SimpleCSVParser.parse(h.value())
+    }.getOrElse(Array.empty)
 
   /** Java API */
   def findIn(headers: java.lang.Iterable[jm.HttpHeader]): Array[String] = {
@@ -136,10 +146,11 @@ private[grpc] object `Trailer` extends 
ModeledCustomHeaderCompanion[`Trailer`] {
 
   override val lowercaseName: String = super.lowercaseName
 
-  override def parse(value: String): Try[`Trailer`] = 
Try(`Trailer`(ArraySeq.unsafeWrapArray(value.split(','))))
+  override def parse(value: String): Try[`Trailer`] =
+    Try(`Trailer`(ArraySeq.unsafeWrapArray(SimpleCSVParser.parse(value))))
 
   def findIn(headers: immutable.Seq[HttpHeader]): 
Option[immutable.Seq[String]] =
     headers.collectFirst {
-      case header if header.is(name) => 
ArraySeq.unsafeWrapArray(header.value().split(',').map(_.trim))
+      case header if header.is(name) => 
ArraySeq.unsafeWrapArray(SimpleCSVParser.parse(header.value()))
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to