Set up compiler project
This commit is contained in:
parent
8b8e09e3b6
commit
5ca6a1eb60
3 changed files with 63 additions and 5 deletions
8
build.sc
8
build.sc
|
@ -107,6 +107,14 @@ object recipe extends TpolecatModule with PublishModule {
|
|||
),
|
||||
)
|
||||
|
||||
override def ivyDeps = Agg(
|
||||
ivy"org.typelevel::cats-effect:2.2.0",
|
||||
ivy"co.fs2::fs2-core:2.4.3",
|
||||
ivy"co.fs2::fs2-io:2.4.3",
|
||||
ivy"com.monovore::decline:1.3.0",
|
||||
ivy"com.monovore::decline-effect:1.3.0",
|
||||
)
|
||||
|
||||
override def moduleDeps = Seq(tagless, scodec)
|
||||
|
||||
override def scalacPluginIvyDeps = Agg(ivy"org.typelevel:::kind-projector:0.11.0", ivy"com.olegpy::better-monadic-for:0.3.1")
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
package tf.bug.fancade.recipe
|
||||
|
||||
object Bar {
|
||||
|
||||
}
|
55
recipe/src/tf/bug/fancade/recipe/Main.scala
Normal file
55
recipe/src/tf/bug/fancade/recipe/Main.scala
Normal file
|
@ -0,0 +1,55 @@
|
|||
package tf.bug.fancade.recipe
|
||||
|
||||
import cats.implicits._
|
||||
import com.monovore.decline.effect.CommandIOApp
|
||||
import cats.effect.{ExitCode, IO}
|
||||
import com.monovore.decline.Opts
|
||||
import java.nio.file.Path
|
||||
import com.monovore.decline.Argument
|
||||
|
||||
object Main extends CommandIOApp(
|
||||
name = "fancade-recipe",
|
||||
header = "Fancade recipe creator and format helper",
|
||||
version = "2.0.0",
|
||||
) {
|
||||
|
||||
sealed trait InFormat
|
||||
object InFormat {
|
||||
implicit val arg: Argument[InFormat] = Argument.fromMap("input-format", Map(
|
||||
"json" -> FancadeStackJson,
|
||||
"fcl" -> FancadeLisp,
|
||||
))
|
||||
}
|
||||
sealed trait OutFormat
|
||||
object OutFormat {
|
||||
implicit val arg: Argument[OutFormat] = Argument.fromMap("output-format", Map(
|
||||
"json" -> FancadeStackJson,
|
||||
"txt" -> Recipe,
|
||||
"bin" -> Level,
|
||||
))
|
||||
}
|
||||
|
||||
case object FancadeStackJson extends InFormat with OutFormat
|
||||
case object FancadeLisp extends InFormat
|
||||
case object Recipe extends OutFormat
|
||||
case object Level extends OutFormat
|
||||
|
||||
case class Compile(in: InFormat, inFile: Path, out: OutFormat, outFile: Path)
|
||||
|
||||
val compileOpts = {
|
||||
val inFormatOpts = Opts.argument[InFormat]("input-format")
|
||||
val inFileOpts = Opts.argument[Path]("input-path")
|
||||
val outFormatOpts = Opts.argument[OutFormat]("output-format")
|
||||
val outFileOpts = Opts.argument[Path]("output-path")
|
||||
|
||||
Opts.subcommand("compile", "Converts between script formats") {
|
||||
(inFormatOpts, inFileOpts, outFormatOpts, outFileOpts).mapN(Compile)
|
||||
}
|
||||
}
|
||||
|
||||
override def main: Opts[IO[ExitCode]] = compileOpts.map {
|
||||
case Compile(in, _, out, _) =>
|
||||
IO(println(s"hello $in $out")).as(ExitCode.Success)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue