/
LineString.purs
26 lines (20 loc) · 971 Bytes
/
LineString.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module Data.LineString where
import Prelude
import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, encodeJson, jsonEmptyObject, (.:), (.:?), (:=), (:=?), (~>), (~>?))
import Data.Basic.BoundingBox (BoundingBox)
import Data.Basic.LineStringCoordinates (LineStringCoordinates)
import Data.Maybe (Maybe)
newtype LineString = LineString { bbox :: Maybe BoundingBox, coordinates :: LineStringCoordinates }
derive newtype instance showLineString :: Show LineString
instance decodeJsonLineString :: DecodeJson LineString where
decodeJson json = do
geometry <- decodeJson json
coordinates <- geometry .: "coordinates"
bbox <- geometry .:? "bbox"
pure $ LineString { coordinates, bbox }
instance encodeJsonLineString :: EncodeJson LineString where
encodeJson (LineString { coordinates, bbox }) =
"type" := "LineString"
~> "coordinates" := encodeJson coordinates
~> "bbox" :=? (encodeJson <$> bbox)
~>? jsonEmptyObject