From 6e6f66d6d01618c4091465981a504ef377d0d7a7 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Fri, 17 Mar 2017 14:37:44 +0000 Subject: [PATCH] Start structure to discover JsonWriter --- .../scala/sbt/internal/server/SettingQuery.scala | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/server/SettingQuery.scala b/main/src/main/scala/sbt/internal/server/SettingQuery.scala index c14f78447..d9d2eb8ed 100644 --- a/main/src/main/scala/sbt/internal/server/SettingQuery.scala +++ b/main/src/main/scala/sbt/internal/server/SettingQuery.scala @@ -8,6 +8,8 @@ package server import java.net.URI import scala.util.{ Left, Right } import sbt.protocol._ +import sjsonnew._ +import sjsonnew.support.scalajson.unsafe._ object SettingQuery { import sbt.internal.util.{ AttributeKey, Settings } @@ -84,7 +86,18 @@ object SettingQuery { case x => Right(x) } - def toJsonString[A: Manifest](x: A): String = x.toString + def getJsonWriter[A: Manifest](x: A): Option[JsonWriter[A]] = None + + def toJsonStringStrict[A: Manifest](x: A): Either[String, String] = + getJsonWriter[A](x) + .toRight(s"JsonWriter for ${manifest[A]} not found") + .map(implicit jsonWriter => CompactPrinter(Converter.toJsonUnsafe(x))) + + def toJsonString[A: Manifest](x: A): String = + toJsonStringStrict(x) match { + case Right(s) => s + case Left(_) => x.toString + } def getSettingJsonStringValue[A](structure: BuildStructure, key: Def.ScopedKey[A]): Either[String, String] = getSettingValue(structure, key) map (toJsonString(_)(key.key.manifest))