namespace PureGym open System open System.Threading open System.Threading.Tasks open RestEase type IPureGymApi = [] abstract GetGyms : ?ct : CancellationToken -> Task [] abstract GetGymAttendance : [] gymId : int * ?ct : CancellationToken -> Task (* [] abstract GetMember : unit -> Task [] abstract GetGym : [] gymId : int -> Task [] abstract GetMemberActivity : unit -> Task [] abstract GetSessions : [] fromDate : DateTime -> [] toDate : DateTime -> Task *) module Foo = let make (client : System.Net.Http.HttpClient) = { new IPureGymApi with member _.GetGyms (ct : CancellationToken option) = async { let! ct = Async.CancellationToken let! response = client.GetAsync (client.BaseAddress.ToString () + "v1/gyms/") |> Async.AwaitTask let response = response.EnsureSuccessStatusCode () let! stream = response.Content.ReadAsStreamAsync ct |> Async.AwaitTask let! node = System.Text.Json.Nodes.JsonNode.ParseAsync (stream, cancellationToken = ct) |> Async.AwaitTask return node.AsArray () |> Seq.map (fun elt -> elt.AsValue () |> Gym.jsonParse) |> List.ofSeq } |> fun a -> Async.StartAsTask (a, ?cancellationToken = ct) member _.GetGymAttendance (gym_id : int, ct : CancellationToken option) = async { let! ct = Async.CancellationToken let! response = client.GetAsync (client.BaseAddress.ToString () + $"v1/gyms/{gym_id}/attendance") |> Async.AwaitTask let response = response.EnsureSuccessStatusCode () let! stream = response.Content.ReadAsStreamAsync ct |> Async.AwaitTask let! node = System.Text.Json.Nodes.JsonNode.ParseAsync (stream, cancellationToken = ct) |> Async.AwaitTask return GymAttendance.jsonParse node } |> fun a -> Async.StartAsTask (a, ?cancellationToken = ct) }