module Mensam.API.Route where

import Mensam.API.Route.Api qualified
import Mensam.API.Route.Frontend qualified
import Mensam.API.Route.Haddock qualified
import Mensam.API.Route.OpenApi qualified
import Mensam.API.Route.Static qualified

import Data.Kind
import Servant
import Servant.API.Generic

type Routes :: Type -> Type
data Routes route = Routes
  { forall route.
Routes route -> route :- ("api" :> NamedRoutes Routes)
routeApi :: route :- "api" :> NamedRoutes Mensam.API.Route.Api.Routes
  , forall route.
Routes route -> route :- ("openapi" :> NamedRoutes Routes)
routeOpenApi :: route :- "openapi" :> NamedRoutes Mensam.API.Route.OpenApi.Routes
  , forall route. Routes route -> route :- ("static" :> API)
routeStatic :: route :- "static" :> Mensam.API.Route.Static.API
  , forall route. Routes route -> route :- ("haddock" :> API)
routeHaddock :: route :- "haddock" :> Mensam.API.Route.Haddock.API
  , forall route. Routes route -> route :- API
routeFrontend :: route :- Mensam.API.Route.Frontend.API
  }
  deriving stock ((forall x. Routes route -> Rep (Routes route) x)
-> (forall x. Rep (Routes route) x -> Routes route)
-> Generic (Routes route)
forall x. Rep (Routes route) x -> Routes route
forall x. Routes route -> Rep (Routes route) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall route x. Rep (Routes route) x -> Routes route
forall route x. Routes route -> Rep (Routes route) x
$cfrom :: forall route x. Routes route -> Rep (Routes route) x
from :: forall x. Routes route -> Rep (Routes route) x
$cto :: forall route x. Rep (Routes route) x -> Routes route
to :: forall x. Rep (Routes route) x -> Routes route
Generic)