module Data.GeoJSON.Intern where
import Data.Text (Text)
import qualified Data.Text as T
import Data.Aeson (toJSON, parseJSON, (.=), (.:), (.:?))
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Types as Aeson
typeT, coordinatesT, geometryT, idT, idBsonT, propertiesT, featuresT :: Text
typeT = "type"
geometriesT = "geometries"
geometryT = "geometry"
coordinatesT = "coordinates"
propertiesT = "properties"
idT = "id"
idBsonT = "_id"
featuresT = "features"
pointT, multiPointT, lineStringT, linearRingT,
multiLineStringT, polygonT, multiPolygonT,
geometryCollectionT, featureT, featureCollectionT :: String
pointT = "Point"
multiPointT = "MultiPoint"
lineStringT = "LineString"
linearRingT = "LinearRing"
multiLineStringT = "MultiLineString"
polygonT = "Polygon"
multiPolygonT = "MultiPolygon"
geometryCollectionT = "GeometryCollection"
featureT = "Feature"
featureCollectionT = "FeatureCollection"
withNamedArray ::
String -> Aeson.Object -> (Aeson.Array -> Aeson.Parser a) -> Aeson.Parser a
withNamedArray n o p = (o .: T.pack n) >>= Aeson.withArray n p