30 lines
580 B
Scala
30 lines
580 B
Scala
package gs
|
|
|
|
import scala.util.matching.Regex
|
|
|
|
case class SemVer(
|
|
major: Int,
|
|
minor: Int,
|
|
patch: Int
|
|
) {
|
|
|
|
override def toString(): String =
|
|
s"$major.$minor.$patch"
|
|
|
|
def incrementPatch(): SemVer = copy(patch = this.patch + 1)
|
|
}
|
|
|
|
object SemVer {
|
|
|
|
val SemVerPattern: Regex =
|
|
"^(0|(?:[1-9][0-9]*))\\.(0|(?:[1-9][0-9]*))\\.(0|(?:[1-9][0-9]*))$".r
|
|
|
|
def parse(candidate: String): Option[SemVer] =
|
|
candidate match {
|
|
case SemVerPattern(major, minor, patch) =>
|
|
Some(SemVer(major.toInt, minor.toInt, patch.toInt))
|
|
case _ =>
|
|
None
|
|
}
|
|
|
|
}
|