From 6e2f77f852c943e3fe38d6fd06357a91b817a01f Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 25 Jan 2017 23:25:24 -0500 Subject: [PATCH] ProblemFormats --- .../src/main/contraband/interface.contra.txt | 7 ++++ .../internal/util/codecs/ProblemFormats.scala | 36 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 internal/util-logging/src/main/scala/sbt/internal/util/codecs/ProblemFormats.scala diff --git a/internal/util-logging/src/main/contraband/interface.contra.txt b/internal/util-logging/src/main/contraband/interface.contra.txt index dd3091750..795e6a4c3 100644 --- a/internal/util-logging/src/main/contraband/interface.contra.txt +++ b/internal/util-logging/src/main/contraband/interface.contra.txt @@ -17,3 +17,10 @@ type Position { sourcePath: String sourceFile: java.io.File } + +type Problem { + category: String! + severity: Severity! + message: String! + position: Position! +} diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codecs/ProblemFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codecs/ProblemFormats.scala new file mode 100644 index 000000000..cbb5f0010 --- /dev/null +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codecs/ProblemFormats.scala @@ -0,0 +1,36 @@ +/** + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +package sbt.internal.util.codec + +import xsbti.{ Problem, Severity, Position } +import sbt.util.InterfaceUtil.problem +import _root_.sjsonnew.{ deserializationError, Builder, JsonFormat, Unbuilder } + +trait ProblemFormats { self: SeverityFormats with PositionFormats with sjsonnew.BasicJsonProtocol => + implicit lazy val ProblemFormat: JsonFormat[Problem] = new JsonFormat[Problem] { + override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): Problem = { + jsOpt match { + case Some(js) => + unbuilder.beginObject(js) + val category = unbuilder.readField[String]("category") + val severity = unbuilder.readField[Severity]("severity") + val message = unbuilder.readField[String]("message") + val position = unbuilder.readField[Position]("position") + unbuilder.endObject() + problem(category, position, message, severity) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: Problem, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("category", obj.category) + builder.addField("severity", obj.severity) + builder.addField("message", obj.message) + builder.addField("position", obj.position) + builder.endObject() + } + } +}