From 8efd46de82c7870d7b6ef43b941107359511cbbe Mon Sep 17 00:00:00 2001 From: Chris Jansen Date: Fri, 21 Oct 2022 09:50:57 +0100 Subject: [PATCH] Add invalid label names --- core/src/main/scala/prometheus4cats/Label.scala | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/main/scala/prometheus4cats/Label.scala b/core/src/main/scala/prometheus4cats/Label.scala index 192be5f5..7b90165c 100644 --- a/core/src/main/scala/prometheus4cats/Label.scala +++ b/core/src/main/scala/prometheus4cats/Label.scala @@ -30,13 +30,21 @@ object Label { } - object Name extends internal.Refined.StringRegexRefinement[Name] with LabelNameFromStringLiteral { + object Name extends internal.Refined[String, Name] with LabelNameFromStringLiteral { // prevents macro compilation problems with the status label private[prometheus4cats] val outcomeStatus = new Name("outcome_status") + private val invalidNames: Set[String] = Set("quantile", "le", "name") + protected val regex: Pattern = "^[a-zA-Z_:][a-zA-Z0-9_:]*$".r.pattern override protected def make(a: String): Name = new Name(a) + + override protected def test(a: String): Boolean = + !invalidNames.contains(a) && regex.matcher(a).matches() + + override protected def nonMatchMessage(a: String): String = + s"Label.Name must match pattern `$regex` and not be one of ${invalidNames.mkString(",")}" } }