servant/servant/src/Servant/API/Status.hs

161 lines
3.3 KiB
Haskell

{-# LANGUAGE DataKinds #-}
-- Flexible instances is necessary on GHC 8.4 and earlier
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Servant.API.Status where
import GHC.TypeLits (KnownNat, natVal)
import Network.HTTP.Types.Status
-- | Retrieve a known or unknown Status from a KnownNat
statusFromNat :: forall a proxy. KnownNat a => proxy a -> Status
statusFromNat = toEnum . fromInteger . natVal
-- | Witness that a type-level natural number corresponds to a HTTP status code
class KnownNat n => KnownStatus n where
statusVal :: proxy n -> Status
instance KnownStatus 100 where
statusVal _ = status100
instance KnownStatus 101 where
statusVal _ = status101
instance KnownStatus 200 where
statusVal _ = status200
instance KnownStatus 201 where
statusVal _ = status201
instance KnownStatus 202 where
statusVal _ = status202
instance KnownStatus 203 where
statusVal _ = status203
instance KnownStatus 204 where
statusVal _ = status204
instance KnownStatus 205 where
statusVal _ = status205
instance KnownStatus 206 where
statusVal _ = status206
instance KnownStatus 300 where
statusVal _ = status300
instance KnownStatus 301 where
statusVal _ = status301
instance KnownStatus 302 where
statusVal _ = status302
instance KnownStatus 303 where
statusVal _ = status303
instance KnownStatus 304 where
statusVal _ = status304
instance KnownStatus 305 where
statusVal _ = status305
instance KnownStatus 307 where
statusVal _ = status307
instance KnownStatus 308 where
statusVal _ = status308
instance KnownStatus 400 where
statusVal _ = status400
instance KnownStatus 401 where
statusVal _ = status401
instance KnownStatus 402 where
statusVal _ = status402
instance KnownStatus 403 where
statusVal _ = status403
instance KnownStatus 404 where
statusVal _ = status404
instance KnownStatus 405 where
statusVal _ = status405
instance KnownStatus 406 where
statusVal _ = status406
instance KnownStatus 407 where
statusVal _ = status407
instance KnownStatus 408 where
statusVal _ = status408
instance KnownStatus 409 where
statusVal _ = status409
instance KnownStatus 410 where
statusVal _ = status410
instance KnownStatus 411 where
statusVal _ = status411
instance KnownStatus 412 where
statusVal _ = status412
instance KnownStatus 413 where
statusVal _ = status413
instance KnownStatus 414 where
statusVal _ = status414
instance KnownStatus 415 where
statusVal _ = status415
instance KnownStatus 416 where
statusVal _ = status416
instance KnownStatus 417 where
statusVal _ = status417
instance KnownStatus 418 where
statusVal _ = status418
instance KnownStatus 422 where
statusVal _ = status422
instance KnownStatus 426 where
statusVal _ = status426
instance KnownStatus 428 where
statusVal _ = status428
instance KnownStatus 429 where
statusVal _ = status429
instance KnownStatus 431 where
statusVal _ = status431
instance KnownStatus 500 where
statusVal _ = status500
instance KnownStatus 501 where
statusVal _ = status501
instance KnownStatus 502 where
statusVal _ = status502
instance KnownStatus 503 where
statusVal _ = status503
instance KnownStatus 504 where
statusVal _ = status504
instance KnownStatus 505 where
statusVal _ = status505
instance KnownStatus 511 where
statusVal _ = status511