From a6ed777d5bb31d8cb48416e7bb5dee2658ad4282 Mon Sep 17 00:00:00 2001
From: Peter van 't Hof <p.j.van_t_hof@lumc.nl>
Date: Sat, 8 Nov 2014 14:17:03 +0100
Subject: [PATCH] Added mapToJson method

---
 .../lumc/sasc/biopet/core/config/Config.scala | 24 +++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala b/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
index c35a1fdd7..219374597 100644
--- a/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
+++ b/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
@@ -197,4 +197,28 @@ object Config {
       return None
     }
   }
+
+  def mapToJson(map: Map[String, Any]): Json = {
+    map.foldLeft(jEmptyObject)((acc, kv) => (kv._1 := {
+      kv._2 match {
+        case m: Map[_, _] => mapToJson(m.map(m => m._1.toString -> anyToJson(m._2)))
+        case _            => anyToJson(kv._2)
+      }
+    }) ->: acc)
+  }
+
+  def anyToJson(any: Any): Json = {
+    any match {
+      case j: Json      => j
+      case m: Map[_, _] => mapToJson(m.map(m => m._1.toString -> anyToJson(m._2)))
+      case l: List[_]   => Json.array(l.map(anyToJson(_)): _*)
+      case n: Int       => Json.jNumberOrString(n)
+      case n: Double    => Json.jNumberOrString(n)
+      case n: Long      => Json.jNumberOrString(n)
+      case n: Short     => Json.jNumberOrString(n)
+      case n: Float     => Json.jNumberOrString(n)
+      case n: Byte      => Json.jNumberOrString(n)
+      case _            => jString(any.toString)
+    }
+  }
 }
\ No newline at end of file
-- 
GitLab