Skip to content

Commit

Permalink
Improve SupportedVCS.parse
Browse files Browse the repository at this point in the history
  • Loading branch information
fthomas committed Nov 8, 2020
1 parent 538d8ab commit 2c848e6
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 22 deletions.
Expand Up @@ -104,6 +104,12 @@ object Cli {
}
)

implicit val supportedVCSArgParser: ArgParser[SupportedVCS] =
ArgParser[String].xmapError(
_.asString,
s => SupportedVCS.parse(s).leftMap(error => MalformedValue("SupportedVCS", error))
)

implicit val uriArgParser: ArgParser[Uri] =
ArgParser[String].xmapError(
_.renderString,
Expand Down
Expand Up @@ -16,42 +16,34 @@

package org.scalasteward.core.application

import caseapp.core.Error.MalformedValue
import caseapp.core.argparser.ArgParser
import cats.Eq
import cats.syntax.all._
import org.scalasteward.core.application.SupportedVCS._

sealed trait SupportedVCS {
import SupportedVCS.{Bitbucket, BitbucketServer, GitHub, Gitlab}
val asString = this match {
case GitHub => "github"
case Gitlab => "gitlab"
val asString: String = this match {
case Bitbucket => "bitbucket"
case BitbucketServer => "bitbucket-server"
case GitHub => "github"
case Gitlab => "gitlab"
}
}

object SupportedVCS {
case object GitHub extends SupportedVCS
case object Gitlab extends SupportedVCS
case object Bitbucket extends SupportedVCS
case object BitbucketServer extends SupportedVCS
case object GitHub extends SupportedVCS
case object Gitlab extends SupportedVCS

implicit val supportedVCSEq: Eq[SupportedVCS] =
Eq.fromUniversalEquals
val all = List(Bitbucket, BitbucketServer, GitHub, Gitlab)

def parse(value: String): Either[String, SupportedVCS] =
value match {
case "github" => Right(GitHub)
case "gitlab" => Right(Gitlab)
case "bitbucket" => Right(Bitbucket)
case "bitbucket-server" => Right(BitbucketServer)
case unknown => Left(s"Unexpected string '$unknown'")
def parse(s: String): Either[String, SupportedVCS] =
all.find(_.asString === s) match {
case Some(value) => Right(value)
case None =>
Left(s"Unexpected string '$s'. Expected one of: ${all.map(_.asString).mkString(", ")}.")
}

implicit val supportedVCSParser: ArgParser[SupportedVCS] =
ArgParser[String].xmapError(
_.asString,
s => SupportedVCS.parse(s).leftMap(error => MalformedValue("SupportedVCS", error))
)
implicit val supportedVCSEq: Eq[SupportedVCS] =
Eq.fromUniversalEquals
}
Expand Up @@ -107,4 +107,8 @@ class CliTest extends AnyFunSuite with Matchers with EitherValues {
test("fileArgParser: previous value") {
Cli.fileArgParser(Some(File("/tmp")), "/opt").isLeft shouldBe true
}

test("supportedVCSArgParser: unknown value") {
Cli.supportedVCSArgParser(None, "sourceforge").isLeft shouldBe true
}
}

0 comments on commit 2c848e6

Please sign in to comment.