-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from mastoj/master
Sample complex app
- Loading branch information
Showing
4 changed files
with
77 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -254,3 +254,5 @@ paket-files/ | |
# JetBrains Rider | ||
.idea/ | ||
*.sln.iml | ||
|
||
.vscode/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
module GcloudFunction | ||
open Fable.Import | ||
open System | ||
|
||
module ExpressHelpers = | ||
type ExpressContext = { | ||
Request: express.Request | ||
Response: express.Response | ||
Content: string | ||
} | ||
|
||
type ExpressPart = ExpressContext -> ExpressContext option | ||
|
||
let bind p1 ctx = | ||
match ctx with | ||
| Some ctx -> p1 ctx | ||
| None -> None | ||
|
||
let compose p1 p2 ctx = | ||
match p1 ctx with | ||
| None -> None | ||
| Some ctx -> p2 ctx | ||
|
||
let (>>=) x p = p x | ||
let (>=>) p1 p2 = compose p1 p2 | ||
|
||
let rec choose parts ctx = | ||
match parts with | ||
| [] -> None | ||
| p::ps -> | ||
match p ctx with | ||
| None -> choose ps ctx | ||
| Some ctx -> Some ctx | ||
|
||
let answer = function | ||
| Some ctx -> | ||
ctx.Response.send ctx.Content | ||
| None -> raise (exn "Failed") | ||
|
||
let execute request response app = | ||
let ctx = { Request = request; Response = response; Content = "" } | ||
ctx |> (app >> answer) | ||
|
||
let notFound str ctx = | ||
let res = ctx.Response.status 404. | ||
{ ctx with Response = res; Content = str} |> Some | ||
|
||
open ExpressHelpers | ||
|
||
let hasBodyPart str ctx = | ||
if ctx.Request.body.ToString().Contains(str) | ||
then | ||
{ | ||
ctx with | ||
Content = ctx.Content + "Hello: " + str | ||
} |> Some | ||
else | ||
None | ||
|
||
|
||
let app = | ||
choose | ||
[ | ||
hasBodyPart "Hello" >=> hasBodyPart "Tomas" | ||
hasBodyPart "Yolo" | ||
notFound "Stupid stupid me" | ||
] | ||
|
||
let helloTomas (request: express.Request) (response: express.Response) = | ||
execute request response app | ||
// response.send "Hello, World!" | ||
|
||
let yolo (request: express.Request) (response: express.Response) = | ||
response.send "Yolo, World!" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.