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

org.kynthus.hatalib.argparse.syntax.SetupSyntax0.scala Maven / Gradle / Ivy

The newest version!
package org.kynthus.hatalib.argparse.syntax

import org.kynthus.hatalib.argparse.concept.Setup
import scalaz.Optional
import scalaz.syntax.maybe.ToMaybeOps
import scopt.{OParserSetup, RenderingMode}

import scala.language.{higherKinds, implicitConversions}

/**
 * パーサの動作設定を上書きするメソッド拡張用クラスの第1候補です。
 *
 * @author Kynthus Auoeau
 * @since 1.0.0
 * @version 1.0.0
 */
private[syntax] trait SetupSyntax0 extends Any {

  /**
   * パーサの動作設定上書き用のメソッドを付与するクラスへの暗黙変換です。
   *
   * @param derived パーサの動作設定を保持する値
   * @tparam Derived パーサの動作設定を保持する型
   * @return パーサの動作設定上書き用のメソッドを付与するクラスのインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  implicit final def SetupOps[Derived]
  (derived: => Derived):
  SetupSyntax0.SetupOps[Derived] =
    SetupSyntax0.SetupOps(() => derived)

}

/**
 * パーサの動作設定を上書きするメソッド拡張用クラスの第1候補を内部的に定義します。
 *
 * @author Kynthus Auoeau
 * @since 1.0.0
 * @version 1.0.0
 */
private object SetupSyntax0 extends AnyRef {

  /**
   * パーサの動作設定上書き用のメソッドを付与するクラスです。
   *
   * @constructor パーサの動作設定上書き用の拡張メソッド使用時に暗黙のうちに呼び出されます。
   * @param derived パーサの動作設定を保持する値
   * @tparam Derived パーサの動作設定を保持する型
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  private[syntax] final case class SetupOps[Derived]
  (derived: () => Derived) extends AnyRef {

    /**
     * パーサの動作設定を上書きします。
     *
     * @param setup 上書きする動作設定
     * @param base  動作設定を上書きできることを保証する
     * @tparam Output パーサの動作設定上書き後の型
     * @return 出力形式を上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def setup[Output]
    (setup: OParserSetup)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.apply(this.derived(), setup)

    /**
     * パーサの出力形式を設定します。
     *
     * @param mode 出力形式
     * @param base 動作設定を上書きできることを保証する
     * @tparam Output パーサの動作設定上書き後の型
     * @return 出力形式を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def renderingMode[Output]
    (mode: RenderingMode)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.renderingMode(this.derived(), mode)

    /**
     * 未知のオプションをエラー扱いとするよう設定します。
     *
     * @param base 動作設定を上書きできることを保証する
     * @tparam Output パーサの動作設定上書き後の型
     * @return 未知のオプションをエラー扱いとするよう設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def errorOnUnknownArgument[Output]
    (implicit base: Setup.Aux[Derived, Output]):
    Output = this.errorOnUnknownArgument(isError = true)

    /**
     * 未知のオプションも許可するよう設定します。
     *
     * @param base 動作設定を上書きできることを保証する
     * @tparam Output パーサの動作設定上書き後の型
     * @return 未知のオプションも許可するよう設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def permitOnUnknownArgument[Output]
    (implicit base: Setup.Aux[Derived, Output]):
    Output = this.errorOnUnknownArgument(isError = false)

    /**
     * 未知のオプションをエラー扱いとするか設定します。
     *
     * @param isError エラー扱いとする場合は`true`、しない場合は`false`
     * @param base    動作設定を上書きできることを保証する
     * @tparam Output パーサの動作設定上書き後の型
     * @return 未知のオプションに対する扱いを設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def errorOnUnknownArgument[Output]
    (isError: Boolean)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.errorOnUnknownArgument(this.derived(), isError)

    /**
     * 解析失敗時にコマンドの使用方法を表示します。
     *
     * @param base 動作設定を上書きできることを保証する
     * @tparam Output パーサの動作設定上書き後の型
     * @return コマンド使用方法を表示するよう設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def showUsageOnError[Output]
    (implicit base: Setup.Aux[Derived, Output]):
    Output = this.showUsageOnError(true.just)

    /**
     * 解析失敗時にコマンドの使用方法を表示しないようにします。
     *
     * @param base 動作設定を上書きできることを保証する
     * @tparam Output パーサの動作設定上書き後の型
     * @return コマンド使用方法を表示しないよう設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def hideUsageOnError[Output]
    (implicit base: Setup.Aux[Derived, Output]):
    Output = this.showUsageOnError(false.just)

    /**
     * 解析失敗時にコマンドの使用方法を表示するか設定します。
     *
     * @param isShow `true`を持つ有効値の場合は表示し、それ以外の場合は表示しない
     * @param base   動作設定を上書きできることを保証する
     * @tparam UnusedCategory 型パラメータを持ち、値を持たない可能性を表現可能な型
     * @tparam Output         パーサの動作設定上書き後の型
     * @return コマンド使用方法の表示有無を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def showUsageOnError[UnusedCategory[_] : Optional, Output]
    (isShow: UnusedCategory[Boolean])
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.showUsageOnError(this.derived(), isShow)

    /**
     * 解析結果のうち正常なメッセージをどう扱うか設定します。
     *
     * @param display メッセージに対する処理
     * @param base    動作設定を上書きできることを保証する
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @tparam Output パーサの動作設定上書き後の型
     * @return 正常なメッセージの扱いについて設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def displayToOut[Unused, Output]
    (display: String => Unused)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.displayToOut(this.derived(), display)

    /**
     * 解析結果のうちエラーメッセージをどう扱うか設定します。
     *
     * @param display メッセージに対する処理
     * @param base    動作設定を上書きできることを保証する
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @tparam Output パーサの動作設定上書き後の型
     * @return エラーメッセージの扱いについて設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def displayToErr[Unused, Output]
    (display: String => Unused)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.displayToErr(this.derived(), display)

    /**
     * エラー発生時のレポートの処理方法を設定します。
     *
     * @param report レポート処理
     * @param base   動作設定を上書きできることを保証する
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @tparam Output パーサの動作設定上書き後の型
     * @return エラー発生時のレポートの処理方法を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def reportError[Unused, Output]
    (report: String => Unused)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.reportError(this.derived(), report)

    /**
     * 警告発生時のレポートの処理方法を設定します。
     *
     * @param report レポート処理
     * @param base   動作設定を上書きできることを保証する
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @tparam Output パーサの動作設定上書き後の型
     * @return 警告発生時のレポートの処理方法を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def reportWarning[Unused, Output]
    (report: String => Unused)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.reportWarning(this.derived(), report)

    /**
     * ヘルプおよびバージョン情報表示後にどう終了するかを設定します。
     *
     * @param terminator ヘルプおよびバージョン情報表示後に呼ばれる終了処理
     * @param base       動作設定を上書きできることを保証する
     * @tparam UnusedResult 終了処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @tparam Output       パーサの動作設定上書き後の型
     * @return 終了処理を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    def terminate[UnusedResult, Output]
    (terminator: Either[String, Unit] => UnusedResult)
    (implicit base: Setup.Aux[Derived, Output]):
    Output = Setup.apply.terminate(this.derived(), terminator)

  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy