From 992b35af3c84762a33e1c319eee26d50cad1d945 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Fri, 17 Mar 2017 13:20:59 +0000 Subject: [PATCH] Start setup for JSON-format setting values --- .../sbt/internal/server/SettingQuery.scala | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/main/src/main/scala/sbt/internal/server/SettingQuery.scala b/main/src/main/scala/sbt/internal/server/SettingQuery.scala index 196350b18..a7936110f 100644 --- a/main/src/main/scala/sbt/internal/server/SettingQuery.scala +++ b/main/src/main/scala/sbt/internal/server/SettingQuery.scala @@ -75,28 +75,25 @@ object SettingQuery { structure.data ) + def getSettingValue[A](structure: BuildStructure, key: Def.ScopedKey[A]): Either[String, A] = + structure.data.get(key.scope, key.key) + .toRight(s"Key ${Def displayFull key} not found") + .flatMap { + case _: Task[_] => Left(s"Key ${Def displayFull key} is a task, can only query settings") + case _: InputTask[_] => Left(s"Key ${Def displayFull key} is an input task, can only query settings") + case x => Right(x) + } + + def toJsonString[A: Manifest](x: A): String = x.toString + + def getSettingJsonStringValue[A](structure: BuildStructure, key: Def.ScopedKey[A]): Either[String, String] = + getSettingValue(structure, key) map (toJsonString(_)(key.key.manifest)) + def handleSettingQuery(req: SettingQuery, structure: BuildStructure, currentBuild: URI): SettingQueryResponse = { val key = Parser.parse(req.setting, scopedKeyParser(structure, currentBuild)) - def getSettingValue[A](key: Def.ScopedKey[A]): Either[String, A] = - structure.data.get(key.scope, key.key) - .toRight(s"Key ${Def displayFull key} not found") - .flatMap { - case _: Task[_] => Left(s"Key ${Def displayFull key} is a task, can only query settings") - case _: InputTask[_] => Left(s"Key ${Def displayFull key} is an input task, can only query settings") - case x => Right(x) - } + val result: Either[String, String] = key flatMap (getSettingJsonStringValue(structure, _)) - val values: Either[String, Any] = key match { - case Left(msg) => Left(s"Invalid programmatic input: $msg") - case Right(key) => getSettingValue(key) - } - - val jsonValues: String = values match { - case Left(errors) => errors - case Right(value) => value.toString - } - - SettingQueryResponse(jsonValues) + SettingQueryResponse(result.merge) } }