haskell-admin-core-1.0.0.0: src/Admin/Components/ComponentList.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Admin.Components.ComponentList
( ComponentList(..)
, namesOf
, descriptionsOf
, empty
) where
import Admin.Components.ComponentDescription
import Admin.Components.Internal.TypeLevel (ManySymbolVal, manySymbolVal)
import Data.Version
import GHC.TypeLits (Symbol)
import Servant
data ComponentList (names :: [Symbol]) apis =
ComponentList
{ serveAll :: Server apis
, versions :: [Version]
}
namesOf ::
forall names apis. (ManySymbolVal names)
=> ComponentList names apis
-> [String]
namesOf _ = manySymbolVal (Proxy :: Proxy names)
descriptionsOf ::
forall names apis. (ManySymbolVal names)
=> ComponentList names apis
-> [ComponentDescription]
descriptionsOf cs = zipWith ComponentDescription (namesOf cs) (versions cs)
empty :: ComponentList '[] EmptyAPI
empty = ComponentList emptyServer [makeVersion [1]]