aboutsummaryrefslogtreecommitdiff
path: root/lib/API.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/API.hs')
-rw-r--r--lib/API.hs34
1 files changed, 21 insertions, 13 deletions
diff --git a/lib/API.hs b/lib/API.hs
index 5bf9877..5ea1c06 100644
--- a/lib/API.hs
+++ b/lib/API.hs
@@ -1,7 +1,8 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeOperators #-}
-- | The sole authorative definition of this server's API, given as a Servant-style
-- Haskell type. All other descriptions of the API are generated from this one.
@@ -10,30 +11,33 @@ module API (API, CompleteAPI, GtfsRealtimeAPI, RegisterJson(..), Metrics(..)) wh
import Data.Map (Map)
import Data.Proxy (Proxy (..))
import Data.Swagger (MimeList (MimeList),
- Operation (..),
+ NamedSchema (..), Operation (..),
PathItem (_pathItemGet),
Scheme (Wss), Swagger,
+ SwaggerType (SwaggerObject),
ToSchema (..), _swaggerPaths,
- genericDeclareNamedSchema, type_,
- NamedSchema(..), SwaggerType (SwaggerObject))
+ genericDeclareNamedSchema, type_)
import Data.Swagger.ParamSchema (ToParamSchema (..))
import Data.Text (Text)
import Data.Time (Day, UTCTime)
import Data.UUID (UUID)
import Servant (Application, FormUrlEncoded,
FromHttpApiData (parseUrlPiece),
- Server, err401, err404, type (:>))
-import Servant.API (Capture, Get, JSON, NoContent,
- PlainText, Post, QueryParam, Raw,
- ReqBody, type (:<|>) ((:<|>)))
+ MimeRender (..), Server, err401,
+ err404, type (:>))
+import Servant.API (Capture, Get, JSON, MimeRender,
+ NoContent, OctetStream, PlainText,
+ Post, QueryParam, Raw, ReqBody,
+ type (:<|>) (..))
import Servant.API.WebSocket (WebSocket)
import Servant.GTFS.Realtime (Proto)
import Servant.Swagger (HasSwagger (..))
import Web.Internal.FormUrlEncoded (Form)
import Control.Lens (At (at), (&), (?~))
-import Data.Aeson (FromJSON (..), genericParseJSON, Value)
-import Data.ByteString.Lazy (ByteString)
+import Data.Aeson (FromJSON (..), Value,
+ genericParseJSON)
+import Data.ByteString (ByteString)
import Data.HashMap.Strict.InsOrd (singleton)
import GHC.Generics (Generic)
import GTFS
@@ -71,6 +75,7 @@ type API = "stations" :> Get '[JSON] (Map StationID Station)
:<|> "debug" :> "pings" :> Get '[JSON] (Map Token [TrainPing])
:<|> "debug" :> "pings" :> Capture "Trip ID" TripID :> Capture "day" Day :> Get '[JSON] [TrainPing]
:<|> "debug" :> "register" :> Capture "Trip ID" TripID :> Capture "day" Day :> Post '[JSON] Token
+ :<|> "gtfs.zip" :> Get '[OctetStream] GTFSFile
:<|> "gtfs" :> GtfsRealtimeAPI
-- | The API used for publishing gtfs realtime updates
@@ -93,6 +98,8 @@ type CompleteAPI =
data Metrics = Metrics
{ metricsWSGauge :: Gauge }
+instance MimeRender OctetStream GTFSFile where
+ mimeRender p (GTFSFile bytes) = mimeRender p bytes
@@ -109,3 +116,4 @@ instance HasSwagger WebSocket where
}
}
}
+