Skip to content

Commit

Permalink
Migrate away from parser-style Request.Parser.
Browse files Browse the repository at this point in the history
  • Loading branch information
dillonkearns committed May 27, 2023
1 parent 7935b9b commit 27999b3
Show file tree
Hide file tree
Showing 27 changed files with 828 additions and 991 deletions.
5 changes: 3 additions & 2 deletions codegen/GenerateMain.elm
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import Gen.Pages.Internal.RoutePattern
import Gen.Pages.Navigation
import Gen.Pages.PageUrl
import Gen.PagesMsg
import Gen.Server.Request
import Gen.Server.Response
import Gen.String
import Gen.Tuple
Expand Down Expand Up @@ -629,7 +630,7 @@ otherFile routes phaseString =
dataForRoute =
Elm.Declare.fn2
"dataForRoute"
( "requestPayload", Just Gen.Json.Decode.annotation_.value )
( "requestPayload", Just Gen.Server.Request.annotation_.request )
( "maybeRoute", Type.maybe (Type.named [ "Route" ] "Route") |> Just )
(\requestPayload maybeRoute ->
Elm.Case.maybe maybeRoute
Expand Down Expand Up @@ -681,7 +682,7 @@ otherFile routes phaseString =
action =
Elm.Declare.fn2
"action"
( "requestPayload", Just Gen.Json.Decode.annotation_.value )
( "requestPayload", Just Gen.Server.Request.annotation_.request )
( "maybeRoute", Type.maybe (Type.named [ "Route" ] "Route") |> Just )
(\requestPayload maybeRoute ->
Elm.Case.maybe maybeRoute
Expand Down
75 changes: 38 additions & 37 deletions examples/blog-engine/app/Route/Admin/Slug_.elm
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import Platform.Sub
import Post exposing (Post)
import Route
import RouteBuilder
import Server.Request
import Server.Request exposing (Request)
import Server.Response
import Shared
import UrlPath
Expand Down Expand Up @@ -99,37 +99,36 @@ type alias ActionData =

data :
RouteParams
-> Server.Request.Parser (BackendTask.BackendTask FatalError.FatalError (Server.Response.Response Data ErrorPage.ErrorPage))
data routeParams =
Server.Request.succeed
(if routeParams.slug == "new" then
Server.Response.render
{ post =
{ slug = ""
, title = ""
, body = ""
, publish = Nothing
}
-> Request
-> BackendTask.BackendTask FatalError.FatalError (Server.Response.Response Data ErrorPage.ErrorPage)
data routeParams request =
if routeParams.slug == "new" then
Server.Response.render
{ post =
{ slug = ""
, title = ""
, body = ""
, publish = Nothing
}
|> BackendTask.succeed

else
BackendTask.Custom.run "getPost"
(Encode.string routeParams.slug)
(Decode.nullable Post.decoder)
|> BackendTask.allowFatal
|> BackendTask.map
(\maybePost ->
case maybePost of
Just post ->
Server.Response.render
{ post = post
}

Nothing ->
Server.Response.errorPage ErrorPage.NotFound
)
)
}
|> BackendTask.succeed

else
BackendTask.Custom.run "getPost"
(Encode.string routeParams.slug)
(Decode.nullable Post.decoder)
|> BackendTask.allowFatal
|> BackendTask.map
(\maybePost ->
case maybePost of
Just post ->
Server.Response.render
{ post = post
}

Nothing ->
Server.Response.errorPage ErrorPage.NotFound
)


head : RouteBuilder.App Data ActionData RouteParams -> List Head.Tag
Expand Down Expand Up @@ -173,10 +172,11 @@ view app shared model =

action :
RouteParams
-> Server.Request.Parser (BackendTask.BackendTask FatalError.FatalError (Server.Response.Response ActionData ErrorPage.ErrorPage))
action routeParams =
Server.Request.map
(\( formResponse, parsedForm ) ->
-> Request
-> BackendTask.BackendTask FatalError.FatalError (Server.Response.Response ActionData ErrorPage.ErrorPage)
action routeParams request =
case Server.Request.formData formHandlers request of
Just ( formResponse, parsedForm ) ->
case parsedForm of
Valid Delete ->
BackendTask.Custom.run "deletePost"
Expand Down Expand Up @@ -228,8 +228,9 @@ action routeParams =
(Server.Response.render
{ errors = formResponse }
)
)
(Server.Request.formData formHandlers)

Nothing ->
BackendTask.fail (FatalError.fromString "Invalid form response")


form : Form.HtmlForm String Post Post msg
Expand Down
74 changes: 37 additions & 37 deletions examples/blog-engine/app/Route/Posts/Slug_.elm
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import PagesMsg exposing (PagesMsg)
import Platform.Sub
import Post
import RouteBuilder
import Server.Request
import Server.Request exposing (Request)
import Server.Response
import Shared
import UrlPath
Expand Down Expand Up @@ -93,39 +93,38 @@ type alias ActionData =

data :
RouteParams
-> Server.Request.Parser (BackendTask.BackendTask FatalError.FatalError (Server.Response.Response Data ErrorPage.ErrorPage))
data routeParams =
Server.Request.succeed
(BackendTask.Custom.run "getPost"
(Encode.string routeParams.slug)
(Decode.nullable Post.decoder)
|> BackendTask.allowFatal
|> BackendTask.andThen
(\maybePost ->
case maybePost of
Just post ->
let
parsed : Result String (List Block)
parsed =
post.body
|> Markdown.Parser.parse
|> Result.mapError (\_ -> "Invalid markdown.")
in
parsed
|> Result.mapError FatalError.fromString
|> Result.map
(\parsedMarkdown ->
Server.Response.render
{ body = parsedMarkdown
}
)
|> BackendTask.fromResult

Nothing ->
Server.Response.errorPage ErrorPage.NotFound
|> BackendTask.succeed
)
)
-> Request
-> BackendTask.BackendTask FatalError.FatalError (Server.Response.Response Data ErrorPage.ErrorPage)
data routeParams request =
BackendTask.Custom.run "getPost"
(Encode.string routeParams.slug)
(Decode.nullable Post.decoder)
|> BackendTask.allowFatal
|> BackendTask.andThen
(\maybePost ->
case maybePost of
Just post ->
let
parsed : Result String (List Block)
parsed =
post.body
|> Markdown.Parser.parse
|> Result.mapError (\_ -> "Invalid markdown.")
in
parsed
|> Result.mapError FatalError.fromString
|> Result.map
(\parsedMarkdown ->
Server.Response.render
{ body = parsedMarkdown
}
)
|> BackendTask.fromResult

Nothing ->
Server.Response.errorPage ErrorPage.NotFound
|> BackendTask.succeed
)


head : RouteBuilder.App Data ActionData RouteParams -> List Head.Tag
Expand Down Expand Up @@ -153,6 +152,7 @@ view app shared model =

action :
RouteParams
-> Server.Request.Parser (BackendTask.BackendTask FatalError.FatalError (Server.Response.Response ActionData ErrorPage.ErrorPage))
action routeParams =
Server.Request.succeed (BackendTask.succeed (Server.Response.render {}))
-> Request
-> BackendTask.BackendTask FatalError.FatalError (Server.Response.Response ActionData ErrorPage.ErrorPage)
action routeParams request =
BackendTask.succeed (Server.Response.render {})
Loading

0 comments on commit 27999b3

Please sign in to comment.