-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathunion.ml
53 lines (46 loc) · 1.34 KB
/
union.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
open Test_shared
module MyQuery =
[%graphql
{|
{
dogOrHuman {
...on Dog {
name
barkVolume
}
...on Human {
name
}
}
}
|}]
type qt = MyQuery.t
let pp formatter (obj : qt) =
Format.fprintf formatter "< dogOrHuman = %a >"
(fun formatter -> function
| `FutureAddedValue _ -> Format.fprintf formatter "`FutureAddedValue"
| `Dog (dog : MyQuery.t_dogOrHuman_Dog) ->
Format.fprintf formatter "`Dog @[<>< name = %a ; barkVolume = %a >@]"
Format.pp_print_string dog.name Format.pp_print_float dog.barkVolume
| `Human (human : MyQuery.t_dogOrHuman_Human) ->
Format.fprintf formatter "`Human @[<>< name = %a >@]"
Format.pp_print_string human.name)
obj.dogOrHuman
let equal (a : qt) (b : qt) =
match (a.dogOrHuman, b.dogOrHuman) with
| `Dog a, `Dog b -> a.name = b.name && a.barkVolume = b.barkVolume
| `Human a, `Human b -> a.name = b.name
| _ -> false
let decodes_exhaustive_query () =
test_exp
({| {
"dogOrHuman": {
"__typename": "Dog",
"name": "Fido",
"barkVolume": 123.0
}
} |}
|> Json.Read.from_string |> MyQuery.unsafe_fromJson |> MyQuery.parse)
{ dogOrHuman = `Dog { name = "Fido"; barkVolume = 123.0 } }
equal pp
let tests = [ ("Decodes exhaustive query", decodes_exhaustive_query) ]