module Mensam.API.Route.Api where

import Mensam.API.Route.Api.OpenApi qualified
import Mensam.API.Route.Api.Reservation qualified
import Mensam.API.Route.Api.Space qualified
import Mensam.API.Route.Api.User qualified

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

type Routes :: Type -> Type
data Routes route = Routes
  { forall route. Routes route -> route :- NamedRoutes Routes
routeOpenApi :: route :- NamedRoutes Mensam.API.Route.Api.OpenApi.Routes
  , forall route. Routes route -> route :- NamedRoutes Routes
routeUser :: route :- NamedRoutes Mensam.API.Route.Api.User.Routes
  , forall route. Routes route -> route :- NamedRoutes Routes
routeSpace :: route :- NamedRoutes Mensam.API.Route.Api.Space.Routes
  , forall route.
Routes route -> route :- ("reservation" :> NamedRoutes Routes)
routeReservation :: route :- "reservation" :> NamedRoutes Mensam.API.Route.Api.Reservation.Routes
  }
  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)