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

org.kynthus.hatalib.argparse.instance.SetupInstances0.scala Maven / Gradle / Ivy

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

import org.kynthus.hatalib.argparse.concept.Setup
import org.kynthus.hatalib.argparse.syntax.SetupSyntax.SetupOps
import org.kynthus.hatalib.core.concept.{ResultCategory, Run}
import org.kynthus.hatalib.core.syntax.TagSyntax.TagOps
import scalaz.syntax.applicative.ApplicativeIdV
import scalaz.syntax.bind.ToBindOps
import scalaz.syntax.tag.ToTagOps
import scalaz.{@@, Applicative, Bind, Optional}
import scopt.{DefaultOParserSetup, OParserSetup, RenderingMode}
import shapeless.labelled.FieldType
import shapeless.ops.record.{Selector, Updater}
import shapeless.record.recordOps
import shapeless.{HList, Refute}

import scala.language.higherKinds

/**
 * パーサの動作設定を上書きする型クラスインスタンスの第1候補です。
 *
 * @author Kynthus Auoeau
 * @since 1.0.0
 * @version 1.0.0
 */
private[instance] trait SetupInstances0 extends Any {

  /**
   * 構築中の情報へパーサの動作設定を追加します。
   *
   * @param runCategory   動作設定を持つ値を格納する型を決定するマーカー
   * @param applicative   構築中の情報をラップ可能なことを保証する
   * @param setupUpdater  パーサの動作設定を追加可能なことを保証する
   * @param setupNotExist パーサの動作設定をまだ保持していないことを保証する
   * @tparam InsertingSetup   動作設定の追加対象となる型
   * @tparam UnusedKeys       パーサへのオプション追加時に使用する幽霊型(動作設定時は未使用)
   * @tparam InsertedSetup    動作設定を追加した後の型
   * @tparam InsertedCategory 構築中の情報をラップする型
   * @return 構築中の情報へパーサの動作設定を追加する型クラスインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  implicit final def InsertSetup[
    InsertingSetup <: HList,
    UnusedKeys,
    InsertedSetup <: HList,
    InsertedCategory[_]
  ](
     implicit
     runCategory: ResultCategory[InsertedCategory] @@ Run.type,
     applicative: Applicative[InsertedCategory],
     setupUpdater: Updater.Aux[
       InsertingSetup,
       FieldType[
         SetupRecord.T,
         OParserSetup
       ],
       InsertedSetup
     ],
     setupNotExist: Refute[
       Selector[
         InsertingSetup,
         SetupRecord.T
       ]
     ]
   ): Setup.Aux[
    InsertingSetup @@ UnusedKeys,
    InsertedCategory[InsertedSetup @@ UnusedKeys]
  ] = SetupInstances0.InsertSetup

  /**
   * 構築中の情報が持つパーサの動作設定を更新します。
   *
   * @param runCategory   動作設定を持つ値を格納する型を決定するマーカー
   * @param applicative   構築中の情報をラップ可能なことを保証する
   * @param setupSelector パーサの動作設定が既に存在することを保証する
   * @param setupUpdater  パーサの動作設定を更新可能なことを保証する
   * @tparam UnusedKey       パーサへのオプション追加時に使用する幽霊型(動作設定時は未使用)
   * @tparam HasSetup        動作設定の型(更新前・更新後で同一)
   * @tparam UpdatedCategory 構築中の情報をラップする型
   * @return 構築中の情報が持つパーサの動作設定を更新する型クラスインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  implicit final def UpdateSetup[
    UnusedKey,
    HasSetup <: HList,
    UpdatedCategory[_]
  ](
     implicit
     runCategory: ResultCategory[UpdatedCategory] @@ Run.type,
     applicative: Applicative[UpdatedCategory],
     setupSelector: Selector.Aux[
       HasSetup,
       SetupRecord.T,
       OParserSetup
     ],
     setupUpdater: Updater.Aux[
       HasSetup,
       FieldType[
         SetupRecord.T,
         OParserSetup
       ],
       HasSetup
     ]
   ): Setup.Aux[
    HasSetup @@ UnusedKey,
    UpdatedCategory[HasSetup @@ UnusedKey]
  ] = SetupInstances0.UpdateSetup

  /**
   * ラップされた型が持つ構築中の情報のパーサ動作設定を設定します。
   *
   * @param runCategory 動作設定を持つ値を格納する型を決定するマーカー
   * @param bind        平坦化変換が可能なことを保証する
   * @param base        ラップされた型に対してパーサの動作設定が行えることを保証する
   * @tparam InsertingSetup   動作設定の設定対象となる型
   * @tparam InsertedSetup    動作設定を設定した後の型
   * @tparam InsertedCategory 構築中の情報をラップする型
   * @return ラップされた型が持つ構築中の情報に対しパーサ動作設定を設定する型クラスインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  implicit final def CategorySetup[
    InsertingSetup,
    InsertedSetup,
    InsertedCategory[_]
  ](
     implicit
     runCategory: ResultCategory[InsertedCategory] @@ Run.type,
     bind: Bind[InsertedCategory],
     base: Setup.Aux[
       InsertingSetup,
       InsertedCategory[InsertedSetup]
     ]
   ): Setup.Aux[
    InsertedCategory[InsertingSetup],
    InsertedCategory[InsertedSetup]
  ] = SetupInstances0.CategorySetup

}

/**
 * パーサの動作設定を上書きする型クラスインスタンスの第1候補を内部的に定義します。
 *
 * @author Kynthus Auoeau
 * @since 1.0.0
 * @version 1.0.0
 */
private object SetupInstances0 extends AnyRef {

  /**
   * 構築中の情報へパーサの動作設定を追加します(内部)。
   *
   * @param runCategory   動作設定を持つ値を格納する型を決定するマーカー
   * @param applicative   構築中の情報をラップ可能なことを保証する
   * @param setupUpdater  パーサの動作設定を追加可能なことを保証する
   * @param setupNotExist パーサの動作設定をまだ保持していないことを保証する
   * @tparam InsertingSetup   動作設定の追加対象となる型
   * @tparam UnusedKeys       パーサへのオプション追加時に使用する幽霊型(動作設定時は未使用)
   * @tparam InsertedSetup    動作設定を追加した後の型
   * @tparam InsertedCategory 構築中の情報をラップする型
   * @return 構築中の情報へパーサの動作設定を追加する型クラスインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  private final def InsertSetup[
    InsertingSetup <: HList,
    UnusedKeys,
    InsertedSetup <: HList,
    InsertedCategory[_]
  ](
     implicit
     runCategory: ResultCategory[InsertedCategory] @@ Run.type,
     applicative: Applicative[InsertedCategory],
     setupUpdater: Updater.Aux[
       InsertingSetup,
       FieldType[
         SetupRecord.T,
         OParserSetup
       ],
       InsertedSetup
     ],
     setupNotExist: Refute[
       Selector[
         InsertingSetup,
         SetupRecord.T
       ]
     ]
   ): Setup.Aux[
    InsertingSetup @@ UnusedKeys,
    InsertedCategory[InsertedSetup @@ UnusedKeys]
  ] = new Setup[InsertingSetup @@ UnusedKeys] {

    /**
     * パーサの動作設定を追加した後の型です。
     *
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override type Result = InsertedCategory[InsertedSetup @@ UnusedKeys]

    /**
     * ユーザ定義したパーサ動作設定を追加します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param setup   追加する動作設定
     * @return 全項目がユーザ定義された動作設定を追加した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def apply
    (
      derived: => InsertingSetup @@ UnusedKeys,
      setup: OParserSetup
    ): super.Result = this (derived) = setup

    /**
     * パーサの出力形式のみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param mode    出力形式
     * @return パーサの出力形式のみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def renderingMode
    (
      derived: => InsertingSetup @@ UnusedKeys,
      mode: RenderingMode
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withRenderingMode(mode)

    /**
     * 未知のオプションに対する扱いのみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param isError エラー扱いとする場合は`true`、しない場合は`false`
     * @return 未知のオプションに対する扱いのみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def errorOnUnknownArgument
    (
      derived: => InsertingSetup @@ UnusedKeys,
      isError: Boolean
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withErrorOnUnknownArgument(isError)

    /**
     * コマンド使用方法の表示有無のみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param isShow  `true`を持つ有効値の場合は表示し、それ以外の場合は表示しない
     * @tparam UnusedCategory 型パラメータを持ち、値を持たない可能性を表現可能な型
     * @return コマンド使用方法の表示有無のみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def showUsageOnError[UnusedCategory[_] : Optional]
    (
      derived: => InsertingSetup @@ UnusedKeys,
      isShow: UnusedCategory[Boolean]
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withShowUsageOnError(isShow)

    /**
     * 正常なメッセージの扱いのみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param display メッセージに対する処理
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 正常なメッセージの扱いのみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def displayToOut[Unused]
    (
      derived: => InsertingSetup @@ UnusedKeys,
      display: String => Unused
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withDisplayToOut(display)

    /**
     * エラーメッセージの扱いのみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param display メッセージに対する処理
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return エラーメッセージの扱いのみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def displayToErr[Unused]
    (
      derived: => InsertingSetup @@ UnusedKeys,
      display: String => Unused
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withDisplayToErr(display)

    /**
     * エラー発生時のレポートの処理のみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param report  レポート処理
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return エラー発生時のレポートの処理のみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def reportError[Unused]
    (
      derived: => InsertingSetup @@ UnusedKeys,
      report: String => Unused
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withReportError(report)

    /**
     * 警告発生時のレポートの処理のみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param report  レポート処理
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 警告発生時のレポートの処理のみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def reportWarning[Unused]
    (
      derived: => InsertingSetup @@ UnusedKeys,
      report: String => Unused
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withReportWarning(report)

    /**
     * 終了動作のみユーザ定義し、それ以外をデフォルトの動作とします。
     *
     * @param derived    パーサの動作設定を持つ値
     * @param terminator ヘルプおよびバージョン情報表示後に呼ばれる終了処理
     * @tparam UnusedResult 終了処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 終了動作のみユーザ定義し、それ以外をデフォルトの動作とした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def terminate[UnusedResult]
    (
      derived: => InsertingSetup @@ UnusedKeys,
      terminator: Either[String, Unit] => UnusedResult
    ): super.Result = this (derived) = new DefaultOParserSetup {}.withTerminate(terminator)

    /**
     * 構築中の情報へパーサの動作設定を追加します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param setup   追加するパーサの動作設定
     * @return 構築中の情報へパーサの動作設定を追加した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    private[this] def update
    (
      derived: => InsertingSetup @@ UnusedKeys,
      setup: OParserSetup
    ): super.Result = {

      // 構築中の情報からタグを外し、パーサの動作設定を追加
      val insertedSetup: InsertedSetup = derived.unwrap.updated(SetupRecord, setup)

      // 再度タグ付けして返す
      val result: InsertedSetup @@ UnusedKeys = insertedSetup.wrap
      result.pure

    }

  }

  /**
   * 構築中の情報が持つパーサの動作設定を更新します(内部)。
   *
   * @param runCategory   動作設定を持つ値を格納する型を決定するマーカー
   * @param applicative   構築中の情報をラップ可能なことを保証する
   * @param setupSelector パーサの動作設定が既に存在することを保証する
   * @param setupUpdater  パーサの動作設定を更新可能なことを保証する
   * @tparam UnusedKey       パーサへのオプション追加時に使用する幽霊型(動作設定時は未使用)
   * @tparam HasSetup        動作設定の型(更新前・更新後で同一)
   * @tparam UpdatedCategory 構築中の情報をラップする型
   * @return 構築中の情報が持つパーサの動作設定を更新する型クラスインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  private final def UpdateSetup[
    UnusedKey,
    HasSetup <: HList,
    UpdatedCategory[_]
  ](
     implicit
     runCategory: ResultCategory[UpdatedCategory] @@ Run.type,
     applicative: Applicative[UpdatedCategory],
     setupSelector: Selector.Aux[
       HasSetup,
       SetupRecord.T,
       OParserSetup
     ],
     setupUpdater: Updater.Aux[
       HasSetup,
       FieldType[
         SetupRecord.T,
         OParserSetup
       ],
       HasSetup
     ]
   ): Setup.Aux[
    HasSetup @@ UnusedKey,
    UpdatedCategory[HasSetup @@ UnusedKey]
  ] = new Setup[HasSetup @@ UnusedKey] {

    /**
     * パーサの動作設定を更新した後の型です。
     *
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override type Result = UpdatedCategory[HasSetup @@ UnusedKey]

    /**
     * パーサの動作設定を上書きします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param setup   上書きする動作設定
     * @return パーサの動作設定を上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def apply
    (
      derived: => HasSetup @@ UnusedKey,
      setup: OParserSetup
    ): super.Result = this (derived) = _ => setup

    /**
     * パーサの出力形式を上書きします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param mode    出力形式
     * @return 出力形式を上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def renderingMode
    (
      derived: => HasSetup @@ UnusedKey,
      mode: RenderingMode
    ): super.Result = this (derived) = _.withRenderingMode(mode)

    /**
     * 未知のオプションをエラー扱いとするかの設定を上書きします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param isError エラー扱いとする場合は`true`、しない場合は`false`
     * @return 未知のオプションをエラー扱いとするかの設定を上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def errorOnUnknownArgument
    (
      derived: => HasSetup @@ UnusedKey,
      isError: Boolean
    ): super.Result = this (derived) = _.withErrorOnUnknownArgument(isError)

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

    /**
     * 解析結果のうち正常なメッセージをどう扱うかを上書きします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param display メッセージに対する処理
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 解析結果のうち正常なメッセージをどう扱うかを上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def displayToOut[Unused]
    (
      derived: => HasSetup @@ UnusedKey,
      display: String => Unused
    ): super.Result = this (derived) = _.withDisplayToOut(display)

    /**
     * 解析結果のうちエラーメッセージをどう扱うかを上書きします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param display メッセージに対する処理
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 解析結果のうちエラーメッセージをどう扱うかを上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def displayToErr[Unused]
    (
      derived: => HasSetup @@ UnusedKey,
      display: String => Unused
    ): super.Result = this (derived) = _.withDisplayToErr(display)

    /**
     * エラー発生時のレポートの処理方法を上書きします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param report  レポート処理
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return エラー発生時のレポートの処理方法を上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def reportError[Unused]
    (
      derived: => HasSetup @@ UnusedKey,
      report: String => Unused
    ): super.Result = this (derived) = _.withReportError(report)

    /**
     * 警告発生時のレポートの処理方法を上書きします。
     *
     * @param derived パーサの動作設定を持つ値
     * @param report  レポート処理
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 警告発生時のレポートの処理方法を上書きした結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def reportWarning[Unused]
    (
      derived: => HasSetup @@ UnusedKey,
      report: String => Unused
    ): super.Result = this (derived) = _.withReportWarning(report)

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

    /**
     * 構築中の情報が持つパーサの動作設定を更新します。
     *
     * @param derived  パーサの動作設定を持つ値
     * @param function パーサの動作設定を更新する処理
     * @return 構築中の情報が持つパーサの動作設定を更新した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    private[this] def update
    (
      derived: => HasSetup @@ UnusedKey,
      function: OParserSetup => OParserSetup
    ): super.Result = {

      // 構築中の情報からタグを外す
      val updatingSetup: HasSetup = derived.unwrap

      // パーサの動作設定を更新する
      val updatedSetup: HasSetup = updatingSetup.replace(
        SetupRecord,
        function(updatingSetup(SetupRecord))
      )

      // 再度タグ付けして返す
      val result: HasSetup @@ UnusedKey = updatedSetup.wrap
      result.pure

    }

  }

  /**
   * ラップされた型が持つ構築中の情報のパーサ動作設定を設定します(内部)。
   *
   * @param runCategory 動作設定を持つ値を格納する型を決定するマーカー
   * @param bind        平坦化変換が可能なことを保証する
   * @param base        ラップされた型に対してパーサの動作設定が行えることを保証する
   * @tparam InsertingSetup   動作設定の設定対象となる型
   * @tparam InsertedSetup    動作設定を設定した後の型
   * @tparam InsertedCategory 構築中の情報をラップする型
   * @return ラップされた型が持つ構築中の情報に対しパーサ動作設定を設定する型クラスインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  private final def CategorySetup[
    InsertingSetup,
    InsertedSetup,
    InsertedCategory[_]
  ](
     implicit
     runCategory: ResultCategory[InsertedCategory] @@ Run.type,
     bind: Bind[InsertedCategory],
     base: Setup.Aux[
       InsertingSetup,
       InsertedCategory[InsertedSetup]
     ]
   ): Setup.Aux[
    InsertedCategory[InsertingSetup],
    InsertedCategory[InsertedSetup]
  ] = new Setup[InsertedCategory[InsertingSetup]] {

    /**
     * ラップされた型に対してパーサの動作設定を追加あるいは更新した後の型です。
     *
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override type Result = InsertedCategory[InsertedSetup]

    /**
     * ラップされた型に対してパーサの動作設定を行います。
     *
     * @param derived パーサの動作設定を持つ値
     * @param setup   パーサの動作設定
     * @return パーサの動作設定を行った結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def apply
    (
      derived: => InsertedCategory[InsertingSetup],
      setup: OParserSetup
    ): super.Result = derived >>= (_.setup(setup))

    /**
     * ラップされた型に対してパーサの出力形式を設定します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param mode    出力形式
     * @return パーサの出力形式を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def renderingMode
    (
      derived: => InsertedCategory[InsertingSetup],
      mode: RenderingMode
    ): super.Result = derived >>= (_.renderingMode(mode))

    /**
     * ラップされた型に対して未知のオプションをエラー扱いとするか設定します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param isError エラー扱いとする場合は`true`、しない場合は`false`
     * @return 未知のオプションをエラー扱いとするか設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def errorOnUnknownArgument
    (
      derived: => InsertedCategory[InsertingSetup],
      isError: Boolean
    ): super.Result = derived >>= (_.errorOnUnknownArgument(isError))

    /**
     * ラップされた型に対して解析失敗時にコマンドの使用方法を表示するか設定します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param isShow  `true`を持つ有効値の場合は表示し、それ以外の場合は表示しない
     * @tparam UnusedCategory 型パラメータを持ち、値を持たない可能性を表現可能な型
     * @return 解析失敗時にコマンドの使用方法を表示するか設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def showUsageOnError[UnusedCategory[_] : Optional]
    (
      derived: => InsertedCategory[InsertingSetup],
      isShow: UnusedCategory[Boolean]
    ): super.Result = derived >>= (_.showUsageOnError(isShow))

    /**
     * ラップされた型に対して解析結果のうち正常なメッセージをどう扱うか設定します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param display メッセージに対する処理
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 正常なメッセージの扱いについて設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def displayToOut[Unused]
    (
      derived: => InsertedCategory[InsertingSetup],
      display: String => Unused
    ): super.Result = derived >>= (_.displayToOut(display))

    /**
     * ラップされた型に対して解析結果のうちエラーメッセージをどう扱うか設定します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param display メッセージに対する処理
     * @tparam Unused メッセージに対する処理の結果得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return エラーメッセージの扱いについて設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def displayToErr[Unused]
    (
      derived: => InsertedCategory[InsertingSetup],
      display: String => Unused
    ): super.Result = derived >>= (_.displayToErr(display))

    /**
     * ラップされた型に対してエラー発生時のレポートの処理方法を設定します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param report  レポート処理
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return エラー発生時のレポートの処理方法を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def reportError[Unused]
    (
      derived: => InsertedCategory[InsertingSetup],
      report: String => Unused
    ): super.Result = derived >>= (_.reportError(report))

    /**
     * ラップされた型に対して警告発生時のレポートの処理方法を設定します。
     *
     * @param derived パーサの動作設定を持つ値
     * @param report  レポート処理
     * @tparam Unused レポート処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 警告発生時のレポートの処理方法を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def reportWarning[Unused]
    (
      derived: => InsertedCategory[InsertingSetup],
      report: String => Unused
    ): super.Result = derived >>= (_.reportWarning(report))

    /**
     * ラップされた型に対してヘルプおよびバージョン情報表示後にどう終了するかを設定します。
     *
     * @param derived    パーサの動作設定を持つ値
     * @param terminator ヘルプおよびバージョン情報表示後に呼ばれる終了処理
     * @tparam UnusedResult 終了処理後に得られる型(最終的に[[scala.Unit]]となり破棄)
     * @return 終了処理を設定した結果
     * @author Kynthus Auoeau
     * @since 1.0.0
     * @version 1.0.0
     */
    override def terminate[UnusedResult]
    (
      derived: => InsertedCategory[InsertingSetup],
      terminator: Either[String, Unit] => UnusedResult
    ): super.Result = derived >>= (_.terminate(terminator))

  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy