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

caseapp.core.complete.Completer.scala Maven / Gradle / Ivy

package caseapp.core.complete

import caseapp.core.Arg
import caseapp.core.help.{WithFullHelp, WithHelp}

trait Completer[T] { self =>
  def optionName(prefix: String, state: Option[T]): List[CompletionItem]
  def optionValue(arg: Arg, prefix: String, state: Option[T]): List[CompletionItem]
  def argument(prefix: String, state: Option[T]): List[CompletionItem]

  def contramapOpt[U](f: U => Option[T]): Completer[U] =
    new Completer[U] {
      def optionName(prefix: String, state: Option[U]): List[CompletionItem] =
        self.optionName(prefix, state.flatMap(f))
      def optionValue(arg: Arg, prefix: String, state: Option[U]): List[CompletionItem] =
        self.optionValue(arg, prefix, state.flatMap(f))
      def argument(prefix: String, state: Option[U]): List[CompletionItem] =
        self.argument(prefix, state.flatMap(f))
    }
  def withHelp: Completer[WithHelp[T]] =
    contramapOpt(_.baseOrError.toOption)
  def withFullHelp: Completer[WithFullHelp[T]] =
    contramapOpt(_.withHelp.baseOrError.toOption)
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy