You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by ar...@apache.org on 2022/08/05 17:38:27 UTC
[daffodil-vscode] 23/28: Use Option for TDMLConfig.
This is an automated email from the ASF dual-hosted git repository.
arosien pushed a commit to branch daffodil-vscode-tdml
in repository https://gitbox.apache.org/repos/asf/daffodil-vscode.git
commit 182b2624b122c06064721d979fa1c7d4d5db2635
Author: Adam Rosien <ad...@rosien.net>
AuthorDate: Tue Jul 26 10:48:36 2022 -0700
Use Option for TDMLConfig.
---
.../org.apache.daffodil.debugger.dap/Parse.scala | 103 ++++++++++-----------
1 file changed, 49 insertions(+), 54 deletions(-)
diff --git a/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala b/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala
index 56ce09d..d1f8baf 100644
--- a/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala
+++ b/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala
@@ -157,12 +157,30 @@ object Parse {
object Debugee {
case class LaunchArgs(
- schemaPath: Path,
- dataPath: Path,
+ defaultSchemaPath: Path,
+ defaultDataPath: Path,
stopOnEntry: Boolean,
infosetOutput: LaunchArgs.InfosetOutput,
- tdmlConfig: LaunchArgs.TDMLConfig
+ tdmlConfig: Option[LaunchArgs.TDMLConfig]
) extends Arguments {
+ def dataPath: Path =
+ tdmlConfig
+ .map {
+ case LaunchArgs.TDMLConfig(_, name, description, path) =>
+ val (_, dataPath) = TDMLWrapper.execute(defaultSchemaPath, defaultDataPath, name, description, path)
+ dataPath
+ }
+ .getOrElse(defaultDataPath)
+
+ def schemaPath: Path =
+ tdmlConfig
+ .map {
+ case LaunchArgs.TDMLConfig(_, name, description, path) =>
+ val (schemaPath, _) = TDMLWrapper.execute(defaultSchemaPath, defaultDataPath, name, description, path)
+ schemaPath
+ }
+ .getOrElse(defaultSchemaPath)
+
def data: IO[InputStream] =
IO.blocking(FileUtils.readFileToByteArray(dataPath.toFile))
.map(new ByteArrayInputStream(_))
@@ -170,7 +188,6 @@ object Parse {
object LaunchArgs {
sealed trait InfosetOutput
- sealed trait TDMLConfig
object InfosetOutput {
case object None extends InfosetOutput
@@ -178,10 +195,7 @@ object Parse {
case class File(path: Path) extends InfosetOutput
}
- object TDMLConfig {
- case object None extends TDMLConfig
- case class Config(action: String, name: String, description: String, path: String) extends TDMLConfig
- }
+ case class TDMLConfig(action: String, name: String, description: String, path: String)
def parse(arguments: JsonObject): EitherNel[String, LaunchArgs] =
(
@@ -236,28 +250,31 @@ object Parse {
}
},
Option(arguments.getAsJsonObject("tdmlConfig")) match {
- case None => Right(LaunchArgs.TDMLConfig.None).toEitherNel
+ case None => Right(Option.empty[LaunchArgs.TDMLConfig]).toEitherNel
case Some(tdmlConfig) =>
Option(tdmlConfig.getAsJsonPrimitive("action")) match {
- case None => Right(LaunchArgs.TDMLConfig.None).toEitherNel
+ case None => Right(Option.empty[LaunchArgs.TDMLConfig]).toEitherNel
case Some(action) =>
action.getAsString() match {
- case "none" => Right(LaunchArgs.TDMLConfig.None).toEitherNel
+ case "none" => Right(Option.empty[LaunchArgs.TDMLConfig]).toEitherNel
case "generate" | "append" | "execute" =>
Right(
- LaunchArgs.TDMLConfig.Config(
- Option(tdmlConfig.getAsJsonPrimitive("action"))
- .map(_.getAsString())
- .getOrElse("None"),
- Option(tdmlConfig.getAsJsonPrimitive("name"))
- .map(_.getAsString())
- .getOrElse("Default Test Case"),
- Option(tdmlConfig.getAsJsonPrimitive("description"))
- .map(_.getAsString())
- .getOrElse("Generated by DFDL VSCode Extension"),
- Option(tdmlConfig.getAsJsonPrimitive("path"))
- .map(_.getAsString())
- .getOrElse("")
+ // TODO: use mapN instead of providing default empty values
+ Some(
+ LaunchArgs.TDMLConfig(
+ Option(tdmlConfig.getAsJsonPrimitive("action"))
+ .map(_.getAsString())
+ .getOrElse("None"),
+ Option(tdmlConfig.getAsJsonPrimitive("name"))
+ .map(_.getAsString())
+ .getOrElse("Default Test Case"),
+ Option(tdmlConfig.getAsJsonPrimitive("description"))
+ .map(_.getAsString())
+ .getOrElse("Generated by DFDL VSCode Extension"),
+ Option(tdmlConfig.getAsJsonPrimitive("path"))
+ .map(_.getAsString())
+ .getOrElse("")
+ )
)
).toEitherNel
case invalidType =>
@@ -277,15 +294,6 @@ object Parse {
def debugee(request: Request): EitherNel[String, Resource[IO, DAPodil.Debugee]] =
Debugee.LaunchArgs
.parse(request.arguments)
- .map { args =>
- // TODO: move this into Debugee.LaunchArgs
- args.tdmlConfig match {
- case Debugee.LaunchArgs.TDMLConfig.Config("execute", name, description, tdmlPath) =>
- val (schemaPath, dataPath) = TDMLWrapper.execute(args.schemaPath, args.dataPath, name, description, tdmlPath)
- args.copy(schemaPath = schemaPath, dataPath = dataPath)
- case _ => args
- }
- }
.map(debugee)
def debugee(args: Debugee.LaunchArgs): Resource[IO, DAPodil.Debugee] =
@@ -371,7 +379,7 @@ object Parse {
dapEvents.offer(None) // ensure dapEvents is terminated when the parse is terminated
) ++ Stream.eval(
args.tdmlConfig match {
- case Debugee.LaunchArgs.TDMLConfig.Config(action, name, description, tdmlPath) =>
+ case Some(Debugee.LaunchArgs.TDMLConfig(action, name, description, tdmlPath)) =>
if (action == "generate")
args.infosetOutput match {
case Debugee.LaunchArgs.InfosetOutput.File(path) =>
@@ -662,7 +670,7 @@ object Parse {
dataPath: String,
stopOnEntry: Boolean,
infosetOutput: InfosetOutput,
- tdmlConfig: TDMLConfig
+ tdmlConfig: Option[TDMLConfig]
)
sealed trait InfosetOutput {
@@ -673,38 +681,25 @@ object Parse {
case InfosetOutput.File(_) => "file"
}
}
- sealed trait TDMLConfig {
- val action: String
- val name: String
- val description: String
- val path: String
- }
object InfosetOutput {
case object None extends InfosetOutput
case object Console extends InfosetOutput
case class File(path: String) extends InfosetOutput
-
+
def apply(that: Debugee.LaunchArgs.InfosetOutput): InfosetOutput =
that match {
case Debugee.LaunchArgs.InfosetOutput.None => None
case Debugee.LaunchArgs.InfosetOutput.Console => Console
case Debugee.LaunchArgs.InfosetOutput.File(path) => File(path.toString)
}
- }
- object TDMLConfig {
- case class Config(action: String, name: String, description: String, path: String) extends TDMLConfig
- case object None extends TDMLConfig {
- val action = "none"
- val name = "Default Test Case Name"
- val description = "Generated by DFDL VSCode Extension"
- val path = ""
}
+ case class TDMLConfig(action: String, name: String, description: String, path: String)
+ object TDMLConfig {
def apply(that: Debugee.LaunchArgs.TDMLConfig): TDMLConfig =
that match {
- case Debugee.LaunchArgs.TDMLConfig.None => None
- case Debugee.LaunchArgs.TDMLConfig.Config(action, name, description, path) =>
- Config(action, name, description, path)
+ case Debugee.LaunchArgs.TDMLConfig(action, name, description, path) =>
+ TDMLConfig(action, name, description, path)
}
}
@@ -717,7 +712,7 @@ object Parse {
launchArgs.dataPath.toString(),
launchArgs.stopOnEntry,
InfosetOutput(launchArgs.infosetOutput),
- TDMLConfig(launchArgs.tdmlConfig)
+ launchArgs.tdmlConfig.map(ConfigEvent.TDMLConfig.apply)
),
BuildInfo(
DAPBuildInfo.version,