X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.data%2Fscl%2FData%2FJson.scl;h=2190287fcf7560d9f637e20e5600c6ef9805bcff;hp=659329df7ed8ad12f1b5cc293f85851a0db0ec1e;hb=66b0fd2ee69d84d3107f109679b6fd1866f8f3fc;hpb=3772b8c75d61b4617bddc8cba49c3e37d0b0e749 diff --git a/bundles/org.simantics.scl.data/scl/Data/Json.scl b/bundles/org.simantics.scl.data/scl/Data/Json.scl index 659329df7..2190287fc 100644 --- a/bundles/org.simantics.scl.data/scl/Data/Json.scl +++ b/bundles/org.simantics.scl.data/scl/Data/Json.scl @@ -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