module Geography.VectorTile.VectorTile
(
VectorTile(..)
, Layer(..)
, Feature(..)
, Val(..)
, layers
, version
, name
, points
, linestrings
, polygons
, extent
, featureId
, metadata
, geometries
) where
import Control.DeepSeq (NFData)
import Data.Int
import qualified Data.Map.Lazy as M
import Data.Text (Text)
import qualified Data.Vector as V
import Data.Word
import GHC.Generics (Generic)
import Geography.VectorTile.Geometry
newtype VectorTile = VectorTile { _layers :: M.Map Text Layer } deriving (Eq,Show,Generic)
layers :: Functor f => (M.Map Text Layer -> f (M.Map Text Layer)) -> VectorTile -> f VectorTile
layers f v = VectorTile <$> f (_layers v)
instance NFData VectorTile
data Layer = Layer { _version :: Int
, _name :: Text
, _points :: V.Vector (Feature Point)
, _linestrings :: V.Vector (Feature LineString)
, _polygons :: V.Vector (Feature Polygon)
, _extent :: Int
} deriving (Eq,Show,Generic)
version :: Functor f => (Int -> f Int) -> Layer -> f Layer
version f l = (\v -> l { _version = v }) <$> f (_version l)
name :: Functor f => (Text -> f Text) -> Layer -> f Layer
name f l = (\v -> l { _name = v }) <$> f (_name l)
points :: Functor f => (V.Vector (Feature Point) -> f (V.Vector (Feature Point))) -> Layer -> f Layer
points f l = (\v -> l { _points = v }) <$> f (_points l)
linestrings :: Functor f => (V.Vector (Feature LineString) -> f (V.Vector (Feature LineString))) -> Layer -> f Layer
linestrings f l = (\v -> l { _linestrings = v }) <$> f (_linestrings l)
polygons :: Functor f => (V.Vector (Feature Polygon) -> f (V.Vector (Feature Polygon))) -> Layer -> f Layer
polygons f l = (\v -> l { _polygons = v }) <$> f (_polygons l)
extent :: Functor f => (Int -> f Int) -> Layer -> f Layer
extent f l = (\v -> l { _extent = v }) <$> f (_extent l)
instance NFData Layer
data Feature g = Feature { _featureId :: Int
, _metadata :: M.Map Text Val
, _geometries :: V.Vector g } deriving (Eq,Show,Generic)
featureId :: Functor f => (Int -> f Int) -> Feature g -> f (Feature g)
featureId f l = (\v -> l { _featureId = v }) <$> f (_featureId l)
metadata :: Functor f => (M.Map Text Val -> f (M.Map Text Val)) -> Feature g -> f (Feature g)
metadata f l = (\v -> l { _metadata = v }) <$> f (_metadata l)
geometries :: Functor f => (V.Vector g -> f (V.Vector g)) -> Feature g -> f (Feature g)
geometries f l = (\v -> l { _geometries = v }) <$> f (_geometries l)
instance NFData g => NFData (Feature g)
data Val = St Text | Fl Float | Do Double | I64 Int64 | W64 Word64 | S64 Int64 | B Bool
deriving (Eq,Ord,Show,Generic)
instance NFData Val