F# JSON parsing with descriptive errors
F#
open System.Text.Json
let requireField (name: string) (el: JsonElement) =
match el.TryGetProperty name with
| true, value -> Ok value
| _ -> Error $"missing field '{name}'"
let parseInt (name: string) (el: JsonElement) =
requireField name el
|> Result.bind (fun v ->
match v.TryGetInt32() with
| true, n -> Ok n
| _ -> Error $"field '{name}' must be an integer")
let parseAge (json: string) =
try
use doc = JsonDocument.Parse json
parseInt "age" doc.RootElement
with :? JsonException as ex ->
Error $"invalid JSON: {ex.Message}"