Compare commits

...

1 Commits

Author SHA1 Message Date
Patrick Stevens
e80ed51498 Strip parens in Path parameter (#138) 2024-05-24 20:36:12 +01:00
4 changed files with 41 additions and 3 deletions

View File

@@ -87,6 +87,40 @@ module PureGymApi =
} }
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct)) |> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
member _.GetGymAttendance' (gymId : int, ct : CancellationToken option) =
async {
let! ct = Async.CancellationToken
let uri =
System.Uri (
(match client.BaseAddress with
| null -> System.Uri "https://whatnot.com"
| v -> v),
System.Uri (
"v1/gyms/{gym_id}/attendance"
.Replace ("{gym_id}", gymId.ToString () |> System.Web.HttpUtility.UrlEncode),
System.UriKind.Relative
)
)
let httpMessage =
new System.Net.Http.HttpRequestMessage (
Method = System.Net.Http.HttpMethod.Get,
RequestUri = uri
)
let! response = client.SendAsync (httpMessage, ct) |> Async.AwaitTask
let response = response.EnsureSuccessStatusCode ()
let! responseStream = response.Content.ReadAsStreamAsync ct |> Async.AwaitTask
let! jsonNode =
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|> Async.AwaitTask
return GymAttendance.jsonParse jsonNode
}
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
member _.GetMember (ct : CancellationToken option) = member _.GetMember (ct : CancellationToken option) =
async { async {
let! ct = Async.CancellationToken let! ct = Async.CancellationToken
@@ -288,7 +322,7 @@ module PureGymApi =
| v -> v), | v -> v),
System.Uri ( System.Uri (
("/v2/gymSessions/member" ("/v2/gymSessions/member"
+ (if "/v2/gymSessions/member".IndexOf (char 63) > 0 then + (if "/v2/gymSessions/member".IndexOf (char 63) >= 0 then
"&" "&"
else else
"?") "?")
@@ -329,7 +363,7 @@ module PureGymApi =
| v -> v), | v -> v),
System.Uri ( System.Uri (
("/v2/gymSessions/member?foo=1" ("/v2/gymSessions/member?foo=1"
+ (if "/v2/gymSessions/member?foo=1".IndexOf (char 63) > 0 then + (if "/v2/gymSessions/member?foo=1".IndexOf (char 63) >= 0 then
"&" "&"
else else
"?") "?")

View File

@@ -17,6 +17,9 @@ type IPureGymApi =
[<Get "v1/gyms/{gym_id}/attendance">] [<Get "v1/gyms/{gym_id}/attendance">]
abstract GetGymAttendance : [<Path "gym_id">] gymId : int * ?ct : CancellationToken -> Task<GymAttendance> abstract GetGymAttendance : [<Path "gym_id">] gymId : int * ?ct : CancellationToken -> Task<GymAttendance>
[<Get "v1/gyms/{gym_id}/attendance">]
abstract GetGymAttendance' : [<Path("gym_id")>] gymId : int * ?ct : CancellationToken -> Task<GymAttendance>
[<RestEase.GetAttribute "v1/member">] [<RestEase.GetAttribute "v1/member">]
abstract GetMember : ?ct : CancellationToken -> Member Task abstract GetMember : ?ct : CancellationToken -> Member Task

View File

@@ -89,6 +89,7 @@ module TestPureGymRestApi =
let api = PureGymApi.make client let api = PureGymApi.make client
api.GetGymAttendance(requestedGym).Result |> shouldEqual expected api.GetGymAttendance(requestedGym).Result |> shouldEqual expected
api.GetGymAttendance'(requestedGym).Result |> shouldEqual expected
let memberCases = let memberCases =
PureGymDtos.memberCases |> List.allPairs baseUris |> List.map TestCaseData PureGymDtos.memberCases |> List.allPairs baseUris |> List.map TestCaseData

View File

@@ -763,7 +763,7 @@ module internal HttpClientGenerator =
| "WoofWare.Myriad.Plugins.RestEase.PathAttribute" | "WoofWare.Myriad.Plugins.RestEase.PathAttribute"
| "Path" | "Path"
| "PathAttribute" -> | "PathAttribute" ->
match attr.ArgExpr with match attr.ArgExpr |> SynExpr.stripOptionalParen with
| SynExpr.Const (SynConst.String (s, SynStringKind.Regular, _), _) -> | SynExpr.Const (SynConst.String (s, SynStringKind.Regular, _), _) ->
Some (HttpAttribute.Path (PathSpec.Verbatim s)) Some (HttpAttribute.Path (PathSpec.Verbatim s))
| SynExpr.Const (SynConst.Unit, _) -> Some (HttpAttribute.Path PathSpec.MatchArgName) | SynExpr.Const (SynConst.Unit, _) -> Some (HttpAttribute.Path PathSpec.MatchArgName)