Recipe: JSON with Suave.Json

Goal: Map JSON bodies with the Suave.Json package.

// dotnet add package Suave.Json
open System.Runtime.Serialization
open Suave
open Suave.Filters
open Suave.Operators
open Suave.Json

[<DataContract>]
type Person =
  { [<field: DataMember(Name = "name")>] name : string
    [<field: DataMember(Name = "age")>]  age  : int }

let echo =
  mapJson (fun (p : Person) -> { p with name = p.name.ToUpperInvariant() })

let app = POST >=> path "/echo" >=> echo
startWebServer defaultConfig app

Also see Requests & responses.