Skip to content

Instantly share code, notes, and snippets.

@wklm
Created September 13, 2017 19:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wklm/9e2e54db986fd8f841e94e94a5efc6b5 to your computer and use it in GitHub Desktop.
Save wklm/9e2e54db986fd8f841e94e94a5efc6b5 to your computer and use it in GitHub Desktop.
module Program
open Chiron
open Suave
open Suave.Filters
open Suave.Json
open Suave.Operators
open Suave.Successful
type User =
{ ID : int
Name : string
IsAdmin : bool
Supervisor: User option }
static member ToJson(x : User) = json {
do! Json.write "id" x.ID
do! Json.write "name" x.Name
do! Json.write "isAdmin" x.IsAdmin
do! Json.write "supervisor" x.Supervisor
}
static member FromJson(_ : User) =
json {
let! i = Json.read "id"
let! n = Json.read "name"
let! a = Json.read "isAdmin"
let! b = Json.read "supervisor"
return {
ID = i
Name = n
IsAdmin = a
Supervisor = b
}
}
let richard =
{ ID = 1
Name = "Richard"
IsAdmin = true
Supervisor = None }
let erlich =
{ ID = 2
Name = "Erlich"
IsAdmin = true
Supervisor = Some richard }
let jared =
{ ID = 3
Name = "Jared"
IsAdmin = false
Supervisor = Some erlich }
let getUserJson (user : User) =
user
|> Json.serialize
|> Json.format
let myCfg = { defaultConfig with bindings = [ HttpBinding.createSimple HTTP "0.0.0.0" 3000 ] }
let app =
choose [ GET >=> choose [ path "/" >=> OK "HERE I'D LIKE TO DISPLAY A LIST OF ALL USERS"
path "/richard" >=> OK (getUserJson richard)
path "/erlich" >=> OK (getUserJson erlich)
path "/jared" >=> OK (getUserJson jared) ]
POST >=> choose [ path "/hello" >=> OK "Hello POST!" ] ]
[<EntryPoint>]
let main argv =
startWebServer myCfg app
0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment