Skip to content

Commit

Permalink
Merge pull request #126 from yarosman/master
Browse files Browse the repository at this point in the history
Correct json for nested objects
  • Loading branch information
dwijnand authored Jul 26, 2018
2 parents f9fb5de + a830a07 commit c686647
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 19 deletions.
30 changes: 20 additions & 10 deletions src/main/scala/sbtbuildinfo/ScalaCaseObjectRenderer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,26 @@ private[sbtbuildinfo] case class ScalaCaseObjectRenderer(options: Seq[BuildInfoO
def toJsonLine: Seq[String] =
if (options contains BuildInfoOption.ToJson)
List(
""" val toJson: String = toMap.map{ i =>
| def quote(x:Any) : String = "\"" + x + "\""
| val key : String = quote(i._1)
| val value : String = i._2 match {
| case elem : Seq[_] => elem.map(quote).mkString("[", ",", "]")
| case elem : Option[_] => elem.map(quote).getOrElse("null")
| case elem => quote(elem)
| }
| s"$key : $value"
| }.mkString("{", ", ", "}")""".stripMargin)
"""| private def quote(x: Any): String = "\"" + x + "\""
| private def toJsonValue(value: Any): String = {
| value match {
| case elem: Seq[_] => elem.map(toJsonValue).mkString("[", ",", "]")
| case elem: Option[_] => elem.map(toJsonValue).getOrElse("null")
| case elem: Map[String, Any] => elem.map {
| case (k, v) => toJsonValue(k) + ":" + toJsonValue(v)
| }.mkString("{", ", ", "}")
| case d: Double => d.toString
| case f: Float => f.toString
| case l: Long => l.toString
| case i: Int => i.toString
| case s: Short => s.toString
| case bool: Boolean => bool.toString
| case str: String => quote(str)
| case other => quote(other.toString)
| }
| }
|
| val toJson: String = toJsonValue(toMap)""".stripMargin)
else Nil

}
28 changes: 19 additions & 9 deletions src/sbt-test/sbt-buildinfo/options/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,26 @@ lazy val root = (project in file(".")).
""" "name" -> name,""" ::
""" "scalaVersion" -> scalaVersion)""" ::
"""""" ::
""" val toJson: String = toMap.map{ i =>""" ::
""" def quote(x:Any) : String = "\"" + x + "\""""" ::
""" val key : String = quote(i._1)""" ::
""" val value : String = i._2 match {""" ::
""" case elem : Seq[_] => elem.map(quote).mkString("[", ",", "]")""" ::
""" case elem : Option[_] => elem.map(quote).getOrElse("null")""" ::
""" case elem => quote(elem)""" ::
""" private def quote(x: Any): String = "\"" + x + "\""""" ::
""" private def toJsonValue(value: Any): String = {""" ::
""" value match {""" ::
""" case elem: Seq[_] => elem.map(toJsonValue).mkString("[", ",", "]")""" ::
""" case elem: Option[_] => elem.map(toJsonValue).getOrElse("null")""" ::
""" case elem: Map[String, Any] => elem.map {""" ::
""" case (k, v) => toJsonValue(k) + ":" + toJsonValue(v)""" ::
""" }.mkString("{", ", ", "}")""" ::
""" case d: Double => d.toString""" ::
""" case f: Float => f.toString""" ::
""" case l: Long => l.toString""" ::
""" case i: Int => i.toString""" ::
""" case s: Short => s.toString""" ::
""" case bool: Boolean => bool.toString""" ::
""" case str: String => quote(str)""" ::
""" case other => quote(other.toString)""" ::
""" }""" ::
""" s"$key : $value"""" ::
""" }.mkString("{", ", ", "}")""" ::
""" }""" ::
"""""" ::
""" val toJson: String = toJsonValue(toMap)""" ::
"""}""" :: Nil =>
case _ => sys.error("unexpected output: \n" + lines.mkString("\n"))
}
Expand Down

0 comments on commit c686647

Please sign in to comment.