Type-safe GraphQL client generator for Gleam
1---
2version: 1.4.1
3title: Query with optional enum field
4file: ./test/codegen_test.gleam
5test_name: generate_query_with_optional_enum_field_test
6---
7import gleam/dynamic/decode
8import gleam/http/request.{type Request}
9import gleam/json
10import squall
11import gleam/option.{type Option}
12
13pub type Character {
14 Character(
15 id: String,
16 name: String,
17 status: CharacterStatus,
18 gender: Option(Gender),
19 )
20}
21
22pub fn character_decoder() -> decode.Decoder(Character) {
23 use id <- decode.field("id", decode.string)
24 use name <- decode.field("name", decode.string)
25 use status <- decode.field("status", character_status_decoder())
26 use gender <- decode.field("gender", decode.optional(gender_decoder()))
27 decode.success(Character(id: id, name: name, status: status, gender: gender))
28}
29
30pub fn character_to_json(input: Character) -> json.Json {
31 json.object(
32 [
33 #("id", json.string(input.id)),
34 #("name", json.string(input.name)),
35 #("status", json.string(character_status_to_string(input.status))),
36 #("gender", json.nullable(
37 input.gender,
38 fn(v) { json.string(gender_to_string(v)) },
39 )),
40 ],
41 )
42}
43
44pub type GetCharacterResponse {
45 GetCharacterResponse(character: Option(Character))
46}
47
48pub fn get_character_response_decoder() -> decode.Decoder(GetCharacterResponse) {
49 use character <- decode.field("character", decode.optional(character_decoder()))
50 decode.success(GetCharacterResponse(character: character))
51}
52
53pub fn get_character_response_to_json(input: GetCharacterResponse) -> json.Json {
54 json.object(
55 [
56 #("character", json.nullable(input.character, character_to_json)),
57 ],
58 )
59}
60
61pub fn get_character(client: squall.Client) -> Result(Request(String), String) {
62 squall.prepare_request(
63 client,
64 "\n query GetCharacter {\n character {\n id\n name\n status\n gender\n }\n }\n ",
65 json.object([]),
66 )
67}
68
69pub fn parse_get_character_response(body: String) -> Result(GetCharacterResponse, String) {
70 squall.parse_response(body, get_character_response_decoder())
71}
72