Skip to content

Commit 0928f29

Browse files
committed
add json serialization
1 parent 0dad2c7 commit 0928f29

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

fsharp/HopacSeries/Part3/ApiGateway.fsx

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
#r "packages/Hopac/lib/net45/Hopac.Core.dll"
2+
open FSharp.Data
3+
open FSharp.Data
4+
open FSharp.Data
5+
open FSharp.Data
26
#r "packages/Hopac/lib/net45/Hopac.Platform.dll"
37
#r "packages/Hopac/lib/net45/Hopac.dll"
48
#r "packages/Hopac/lib/net45/Hopac.dll"
@@ -111,13 +115,35 @@ type RepoDto = {
111115
Name : string
112116
StargazersCount : int
113117
Languages : string []
114-
}
118+
} with
119+
static member ToJson(r : RepoDto) =
120+
let languages =
121+
r.Languages
122+
|> Array.map (JsonValue.String)
123+
|> JsonValue.Array
124+
let stars =
125+
r.StargazersCount |> decimal |> JsonValue.Number
126+
JsonValue.Record [|
127+
"name", JsonValue.String r.Name
128+
"stars", stars
129+
"languages", languages
130+
|]
115131

116132
type UserDto = {
117133
Name : string
118134
AvatarUrl : string
119135
TopThreeRepos : RepoDto []
120-
}
136+
} with
137+
static member ToJson(u : UserDto) =
138+
let topThreeRepos =
139+
u.TopThreeRepos
140+
|> Array.map RepoDto.ToJson
141+
|> JsonValue.Array
142+
JsonValue.Record [|
143+
"name", JsonValue.String u.Name
144+
"avatarUrl", JsonValue.String u.AvatarUrl
145+
"topThreeRepos", topThreeRepos
146+
|]
121147

122148
let repoDto (repo : Repo) languages = {
123149
Name = repo.Name
@@ -146,5 +172,8 @@ let getUserDto username = job {
146172
}
147173

148174
#time "on"
149-
getUserDto "haf" |> run
175+
getUserDto "haf"
176+
|> Job.map (UserDto.ToJson)
177+
|> Job.map (fun x -> x.ToString())
178+
|> run
150179
#time "off"

0 commit comments

Comments
 (0)