]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Add lookupJsonField to Data/Json SCL module 50/2650/2
authorjsimomaa <jani.simomaa@gmail.com>
Thu, 14 Feb 2019 11:24:34 +0000 (13:24 +0200)
committerJani Simomaa <jani.simomaa@semantum.fi>
Thu, 14 Feb 2019 11:24:50 +0000 (11:24 +0000)
gitlab #256

Change-Id: If3be1a2f355f4542ffb60e0984ceec2b8771ed0f

bundles/org.simantics.scl.data/scl/Data/Json.scl

index 659329df7ed8ad12f1b5cc293f85851a0db0ec1e..2190287fcf7560d9f637e20e5600c6ef9805bcff 100644 (file)
@@ -1,3 +1,23 @@
+/*
+
+An example how to implement 
+
+data GeographicalLocation = GeographicalLocation {
+    latitude :: Double,
+    longitude :: Double
+}
+
+instance Json GeographicalLocation where
+    toJson GeographicalLocation { latitude, longitude } = JsonObject [
+        JsonField "latitude" (toJson latitude),
+        JsonField "longitude" (toJson longitude)
+    ]
+    fromJson object = GeographicalLocation {
+        latitude = fromJson $ fromJust $ lookupJsonField "latitude" object,
+        longitude = fromJson $ fromJust $ lookupJsonField "longitude" object
+    }
+*/
+
 import "StandardLibrary"
 import "Data/Writer"
 import "JavaBuiltin" as Java
@@ -298,6 +318,12 @@ data Json =
   | JsonObject [JsonField]
 data JsonField = JsonField String Json
   
+lookupJsonField :: String -> Json -> Maybe Json  
+lookupJsonField fieldName (JsonObject fields) = mapFirst selector fields
+  where
+    selector (JsonField name value) | name == fieldName = Just value
+    selector _ = Nothing 
+  
 deriving instance Show Json
 deriving instance Show JsonField