{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE StarIsType #-}
{-# LANGUAGE PolyKinds #-}

module Admin.API
  ( AdminAPI
  , ComponentsAPI
  ) where

import Admin.Components.ComponentDescription (ComponentDescription)
import Data.Version
import Servant

-- | The type-level definition of the Haskell Admin API
-- with server components as a parameter
type AdminAPI components = Root :<|> "components" :> ComponentsAPI components

type Root = Get '[ JSON] NoContent :<|> "api_version" :> Get '[ JSON] Version

type ComponentsAPI inner = Get '[ JSON] [ComponentDescription] :<|> inner