-- | -- The following data types correspond to documentation of API version 0.6. -- See https://wiki.openstreetmap.org/wiki/API_v0.6/DTD module Data.Conduit.OSM.Types where import Data.Text (Text) type Version = Double type Generator = Text data OSM = OSM { _version :: Version , _generator :: Maybe Generator , _bounds :: Maybe Bounds , _nodes :: [Node] , _ways :: [Way] , _relations :: [Relation] } deriving (Show, Eq) data Bounds = Bounds { _minlat :: Lat , _minlon :: Lon , _maxlat :: Lat , _maxlon :: Lon } deriving (Show, Eq) type Id = Text type Lat = Double type Lon = Double type Changeset = Text type Visible = Bool type User = Text type Timestamp = Text -- maybe data.time? type Role = Text data Node = Node { _lat :: Lat , _lon :: Lon , _nCommon :: NWRCommon } deriving (Show, Eq) data Relation = Relation { _members :: [Member] , _rCommon :: NWRCommon } deriving (Show, Eq) data Way = Way { _nds :: [Nd] , _wCommon :: NWRCommon } deriving (Show, Eq) data NWRCommon = NWRCommon { _id :: Id , _visible :: Maybe Visible , _changeset :: Maybe Changeset , _timestamp :: Maybe Timestamp , _user :: Maybe User , _tags :: [Tag] } deriving (Show, Eq) data NWR = NWRn | NWRw | NWRr deriving (Show, Eq) data NWRWrap = N Node | W Way | R Relation deriving (Show, Eq) data Member = Member { _type :: NWR , _mRef :: Id , _role :: Maybe Role } deriving (Show, Eq) data Nd = Nd { _ref :: Id } deriving (Show, Eq) -- | Tag stores (Key, Value) data Tag = Tag { _tag :: (Text, Text) } deriving (Show, Eq)