org.kynthus.hatalib.argparse.concept.Args.scala Maven / Gradle / Ivy
The newest version!
package org.kynthus.hatalib.argparse.concept
import scala.annotation.implicitNotFound
/**
* 特定の型がコマンドライン引数を設定値として保持できることを表します。
*
* このトレイトは型クラスとなっており、例えばコマンドライン引数を[[scala.Predef.String]]の[[scala.List]]として、
* 設定値に持てるようにするには、例に示すような型クラスインスタンスを定義します。
*
* @tparam Derived コマンドライン引数を設定値として持つ型
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
@implicitNotFound("Cannot add args ${Derived}.")
trait Args[Derived] extends Any {
/**
* コマンドライン引数へ追加可能な型です。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
type Arg
/**
* 追加後に返すべきコマンドライン引数を保持する型です。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
type Result
/**
* コマンドライン引数を追加して返します。
*
* @param derived コマンドライン引数を持つ値
* @param arg コマンドライン引数へ追加する値
* @return コマンドライン引数を追加した結果
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
def apply(derived: => Derived, arg: => this.Arg): this.Result
}
/**
* コマンドライン引数の追加に関連する機能を定義します。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
object Args extends AnyRef {
/**
* 追加する型と追加後の型をコンパイル時に取得します。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
@implicitNotFound("Cannot add args of ${Input} convert ${Derived}.")
final type Aux[
Derived,
Input,
Output
] = Args[Derived] {
type Arg = Input
type Result = Output
}
/**
* 現在のスコープに含まれる[[Args.Aux]]の型クラスインスタンスを取得します。
*
* @param base スコープに含まれる型クラスインスタンス
* @tparam Derived コマンドライン引数を設定値として持つ型
* @tparam Input コマンドライン引数へ追加可能な型
* @tparam Output 追加後に返すべきコマンドライン引数を保持する型
* @return スコープに含まれる型クラスインスタンス
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
final def apply[Derived, Input, Output]
(implicit base: this.Aux[Derived, Input, Output]):
this.Aux[Derived, Input, Output] = base
}