summaryrefslogtreecommitdiff
path: root/main/core/src/mill/util/JsonFormatters.scala
diff options
context:
space:
mode:
Diffstat (limited to 'main/core/src/mill/util/JsonFormatters.scala')
-rw-r--r--main/core/src/mill/util/JsonFormatters.scala44
1 files changed, 44 insertions, 0 deletions
diff --git a/main/core/src/mill/util/JsonFormatters.scala b/main/core/src/mill/util/JsonFormatters.scala
new file mode 100644
index 00000000..f92941f7
--- /dev/null
+++ b/main/core/src/mill/util/JsonFormatters.scala
@@ -0,0 +1,44 @@
+package mill.util
+
+import ammonite.ops.{Bytes, Path}
+import upickle.Js
+import upickle.default.{ReadWriter => RW}
+object JsonFormatters extends JsonFormatters
+trait JsonFormatters {
+ implicit val pathReadWrite: RW[ammonite.ops.Path] = upickle.default.readwriter[String]
+ .bimap[ammonite.ops.Path](
+ _.toString,
+ Path(_)
+ )
+
+ implicit val bytesReadWrite: RW[Bytes] = upickle.default.readwriter[String]
+ .bimap(
+ o => javax.xml.bind.DatatypeConverter.printBase64Binary(o.array),
+ str => new Bytes(javax.xml.bind.DatatypeConverter.parseBase64Binary(str))
+ )
+
+
+ implicit lazy val crFormat: RW[ammonite.ops.CommandResult] = upickle.default.macroRW
+
+ implicit lazy val modFormat: RW[coursier.Module] = upickle.default.macroRW
+ implicit lazy val depFormat: RW[coursier.Dependency]= upickle.default.macroRW
+ implicit lazy val attrFormat: RW[coursier.Attributes] = upickle.default.macroRW
+ implicit val stackTraceRW = upickle.default.readwriter[Js.Obj].bimap[StackTraceElement](
+ ste => Js.Obj(
+ "declaringClass" -> Js.Str(ste.getClassName),
+ "methodName" -> Js.Str(ste.getMethodName),
+ "fileName" -> Js.Str(ste.getFileName),
+ "lineNumber" -> Js.Num(ste.getLineNumber)
+ ),
+ {case json: Js.Obj =>
+ new StackTraceElement(
+ json("declaringClass").str.toString,
+ json("methodName").str.toString,
+ json("fileName").str.toString,
+ json("lineNumber").num.toInt
+ )
+ }
+ )
+
+
+}