Safe HaskellNone

IHP.RouterSupport

Synopsis

Documentation

class HasPath controller => CanRoute controller where Source #

Methods

parseRoute' :: (?context :: RequestContext) => Parser controller Source #

Instances

Instances details
(AutoRoute controller, Controller controller) => CanRoute controller Source # 
Instance details

Defined in IHP.RouterSupport

Methods

parseRoute' :: Parser controller Source #

CanRoute WelcomeController Source # 
Instance details

Defined in IHP.Welcome.Controller

class HasPath controller where Source #

Methods

pathTo :: controller -> Text Source #

Returns the path to a given action

>>> pathTo UsersAction
"/Users"
>>> pathTo ShowUserAction { userId = "a32913dd-ef80-4f3e-9a91-7879e17b2ece" }
"/ShowUser?userId=a32913dd-ef80-4f3e-9a91-7879e17b2ece"

Instances

Instances details
(Show controller, AutoRoute controller) => HasPath controller Source # 
Instance details

Defined in IHP.RouterSupport

Methods

pathTo :: controller -> Text Source #

HasPath WelcomeController Source # 
Instance details

Defined in IHP.Welcome.Controller

class Data controller => AutoRoute controller where Source #

Minimal complete definition

Nothing

Methods

autoRouteWithIdType :: (?context :: RequestContext, Data idType) => (ByteString -> Maybe idType) -> Parser controller Source #

autoRoute :: (?context :: RequestContext) => Parser controller Source #

allowedMethodsForAction :: ByteString -> [StdMethod] Source #

Specifies the allowed HTTP methods for a given action

The default implementation does a smart guess based on the usual naming conventions for controllers.

Example (for default implementation):

>>> allowedMethodsForAction @ProjectsController "DeleteProjectAction"
[DELETE]
>>> allowedMethodsForAction @ProjectsController "UpdateProjectAction"
[POST, PATCH]
>>> allowedMethodsForAction @ProjectsController "CreateProjectAction"
[POST]
>>> allowedMethodsForAction @ProjectsController "ShowProjectAction"
[GET, HEAD]
>>> allowedMethodsForAction @ProjectsController "HelloAction"
[GET, POST, HEAD]

Instances

Instances details
AutoRoute CodeGenController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

AutoRoute LogsController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

AutoRoute DataController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

AutoRoute EnumValuesController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

AutoRoute EnumsController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

AutoRoute ColumnsController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

AutoRoute TablesController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

AutoRoute SchemaController Source # 
Instance details

Defined in IHP.IDE.ToolServer.Routes

runAction :: forall controller. (Controller controller, ?context :: ControllerContext, ?modelContext :: ModelContext) => controller -> IO ResponseReceived Source #

get :: (Controller action, InitControllerContext application, ?application :: application, ?applicationContext :: ApplicationContext, ?context :: RequestContext, Typeable application, Typeable action) => ByteString -> action -> Parser (IO ResponseReceived) Source #

Routes a given path to an action when requested via GET.

Example:

instance FrontController WebApplication where
    controllers = [
            get "/my-custom-page" NewSessionAction
        ]

The request GET /my-custom-page is now executing NewSessionAction

Also see post.

post :: (Controller action, InitControllerContext application, ?application :: application, ?applicationContext :: ApplicationContext, ?context :: RequestContext, Typeable application, Typeable action) => ByteString -> action -> Parser (IO ResponseReceived) Source #

Routes a given path to an action when requested via POST.

Example:

instance FrontController WebApplication where
    controllers = [
            post "/do-something" DoSomethingAction
        ]

The request POST /do-something is now executing DoSomethingAction

Also see get.

startPage :: forall action application. (Controller action, InitControllerContext application, ?application :: application, ?applicationContext :: ApplicationContext, ?context :: RequestContext, Typeable application, Typeable action) => action -> Parser (IO ResponseReceived) Source #

Defines the start page for a router (when / is requested).

frontControllerToWAIApp :: forall app parent config controllerContext. (?applicationContext :: ApplicationContext, ?context :: RequestContext, FrontController app) => app -> [Parser (IO ResponseReceived)] -> IO ResponseReceived -> IO ResponseReceived Source #

withPrefix :: ByteString -> [Parser ByteString b] -> Parser ByteString b Source #

class FrontController application where Source #

Methods

controllers :: (?applicationContext :: ApplicationContext, ?application :: application, ?context :: RequestContext) => [Parser (IO ResponseReceived)] Source #

Instances

Instances details
FrontController ToolServerApplication Source # 
Instance details

Defined in IHP.IDE.ToolServer

Methods

controllers :: [Parser (IO ResponseReceived)] Source #

parseRoute :: forall controller application. (?applicationContext :: ApplicationContext, ?context :: RequestContext, Controller controller, CanRoute controller, InitControllerContext application, ?application :: application, Typeable application, Data controller) => Parser (IO ResponseReceived) Source #

catchAll :: forall action application. (?applicationContext :: ApplicationContext, ?context :: RequestContext, Controller action, InitControllerContext application, Typeable action, ?application :: application, Typeable application, Data action) => action -> Parser (IO ResponseReceived) Source #

mountFrontController :: forall frontController application. (?applicationContext :: ApplicationContext, ?context :: RequestContext, FrontController frontController) => frontController -> Parser (IO ResponseReceived) Source #

createAction :: forall controller. AutoRoute controller => Maybe controller Source #

Returns the create action for a given controller. Example: `createAction @UsersController == Just CreateUserAction`

updateAction :: forall controller id. AutoRoute controller => Maybe (id -> controller) Source #

Returns the update action when given a controller and id. Example: `updateAction @UsersController == Just (id -> UpdateUserAction id)`

urlTo :: (?context :: context, ConfigProvider context, HasPath action) => action -> Text Source #

Returns the url to a given action.

Uses the baseUrl configured in Config/Config.hs. When no baseUrl is configured in development mode, it will automatically detect the correct baseUrl value.

>>> urlTo UsersAction
"http://localhost:8000/Users"
>>> urlTo ShowUserAction { userId = "a32913dd-ef80-4f3e-9a91-7879e17b2ece" }
"http://localhost:8000/ShowUser?userId=a32913dd-ef80-4f3e-9a91-7879e17b2ece"

parseUUID :: Parser UUID Source #

Parses and returns an UUID

parseId :: PrimaryKey table ~ UUID => Parser (Id' table) Source #

Parses an UUID, afterwards wraps it in an Id

parseIntegerId :: Data idType => ByteString -> Maybe idType Source #

remainingText :: Parser Text Source #

Returns all the remaining text until the end of the input

parseText :: Parser Text Source #

Parses until the next /

webSocketApp :: forall webSocketApp application. (WSApp webSocketApp, InitControllerContext application, ?application :: application, ?applicationContext :: ApplicationContext, ?context :: RequestContext, Typeable application, Typeable webSocketApp) => Parser (IO ResponseReceived) Source #

Routes to a given WebSocket app if the path matches the WebSocket app name

Example:

instance FrontController WebApplication where
    controllers = [
            webSocketApp @AutoRefreshWSApp
        ]

The request /AutoRefreshWSApp will call the AutoRefreshWSApp

webSocketAppWithCustomPath :: forall webSocketApp application. (WSApp webSocketApp, InitControllerContext application, ?application :: application, ?applicationContext :: ApplicationContext, ?context :: RequestContext, Typeable application, Typeable webSocketApp) => ByteString -> Parser (IO ResponseReceived) Source #

Routes to a given WebSocket app if the path matches

Example:

instance FrontController WebApplication where
    controllers = [
            webSocketAppWithCustomPath @AutoRefreshWSApp "my-ws-app"
        ]

The request /my-ws-app will call the AutoRefreshWSApp

Orphan instances

HasPath action => ConvertibleStrings action AttributeValue Source #

This instances makes it possible to write href={MyAction}/ in HSX

Instance details

Methods

convertString :: action -> AttributeValue #