org.kynthus.hatalib.argparse.syntax.BuilderSyntax0.scala Maven / Gradle / Ivy
The newest version!
package org.kynthus.hatalib.argparse.syntax
import org.kynthus.hatalib.core.concept.Builder
import org.kynthus.hatalib.core.syntax.BuilderSyntax.TaggedBuilderOps
import scalaz.@@
import scopt.OParser
import scala.language.implicitConversions
/**
* コマンドライン引数解析にあたり構築情報を生成するメソッド拡張用クラスの第1候補です。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
private[syntax] trait BuilderSyntax0 extends Any {
/**
* 構築情報生成用のメソッドを付与するクラスへの暗黙変換です。
*
* @param derived 構築情報の初期値
* @tparam Derived 構築情報の初期値の型
* @return 構築情報生成用のメソッドを付与するクラスのインスタンス
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
implicit final def ParseBuilderOps[Derived]
(derived: => Derived):
BuilderSyntax0.ParseBuilderOps[Derived] =
BuilderSyntax0.ParseBuilderOps(() => derived)
}
/**
* コマンドライン引数解析にあたり構築情報を生成するメソッド拡張用クラスの第1候補を内部的に定義します。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
private object BuilderSyntax0 extends AnyRef {
/**
* 構築情報生成用のメソッドを付与するクラスです。
*
* @constructor 構築情報生成用の拡張メソッド使用時に暗黙のうちに呼び出されます。
* @param derived 構築情報の初期値
* @tparam Derived 構築情報の初期値の型
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
private[syntax] final case class ParseBuilderOps[Derived]
(derived: () => Derived) extends AnyRef {
/**
* 初期値から構築情報を生成します。
*
* @param base 構築情報を生成可能なことを証明する
* @tparam Output コマンドライン引数追加後の型
* @return コマンドライン引数へ追加した結果
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
def parseBuilder[Output]
(implicit base: Builder.Aux[Derived, Output] @@ OParser.type):
Output = this.derived().builder
}
}