All Downloads are FREE. Search and download functionalities are using the official Maven repository.

caseapp.core.package.scala Maven / Gradle / Ivy

package caseapp

package object core {

  implicit class NameOps(name: Name) {

    private def isShort = name.name.length == 1

    private def optionName = caseapp.core.util.pascalCaseSplit(name.name.toList).map(_.toLowerCase).mkString("-")
    private def optionEq = if (isShort) s"-${name.name}=" else s"--$optionName="

    def option: String = if (isShort) s"-${name.name}" else s"--$optionName"

    def apply(args: List[String], isFlag: Boolean): Option[List[String]] = args match {
      case Nil => None
      case h :: t =>
        if (h == option)
          Some(t)
        else if (!isFlag && h.startsWith(optionEq))
          Some(h.drop(optionEq.length) :: t)
        else
          None
    }

    def apply(arg: String): Either[Unit, Option[String]] =
      if (arg == option)
        Right(None)
      else if (arg.startsWith(optionEq))
        Right(Some(arg.drop(optionEq.length)))
      else
        Left(())
  }

  implicit class ValueDescriptionOps(desc: ValueDescription) {

    def message: String = s"<${desc.description}>"
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy