Type-safe GraphQL client generator for Gleam
1---
2version: 1.4.1
3title: Simple query function generation
4file: ./test/codegen_test.gleam
5test_name: generate_simple_query_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 User {
14 User(id: String, name: Option(String))
15}
16
17pub fn user_decoder() -> decode.Decoder(User) {
18 use id <- decode.field("id", decode.string)
19 use name <- decode.field("name", decode.optional(decode.string))
20 decode.success(User(id: id, name: name))
21}
22
23pub fn user_to_json(input: User) -> json.Json {
24 json.object(
25 [
26 #("id", json.string(input.id)),
27 #("name", json.nullable(input.name, json.string)),
28 ],
29 )
30}
31
32pub type GetUserResponse {
33 GetUserResponse(user: Option(User))
34}
35
36pub fn get_user_response_decoder() -> decode.Decoder(GetUserResponse) {
37 use user <- decode.field("user", decode.optional(user_decoder()))
38 decode.success(GetUserResponse(user: user))
39}
40
41pub fn get_user_response_to_json(input: GetUserResponse) -> json.Json {
42 json.object([#("user", json.nullable(input.user, user_to_json))])
43}
44
45pub fn get_user(client: squall.Client) -> Result(Request(String), String) {
46 squall.prepare_request(
47 client,
48 "\n query GetUser {\n user {\n id\n name\n }\n }\n ",
49 json.object([]),
50 )
51}
52
53pub fn parse_get_user_response(body: String) -> Result(GetUserResponse, String) {
54 squall.parse_response(body, get_user_response_decoder())
55}
56