Type-safe GraphQL client generator for Gleam
1---
2version: 1.4.1
3title: Mutation function generation
4file: ./test/codegen_test.gleam
5test_name: generate_mutation_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: 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.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.string(input.name)),
28 ],
29 )
30}
31
32pub type CreateUserResponse {
33 CreateUserResponse(create_user: Option(User))
34}
35
36pub fn create_user_response_decoder() -> decode.Decoder(CreateUserResponse) {
37 use create_user <- decode.field("createUser", decode.optional(user_decoder()))
38 decode.success(CreateUserResponse(create_user: create_user))
39}
40
41pub fn create_user_response_to_json(input: CreateUserResponse) -> json.Json {
42 json.object([#("createUser", json.nullable(input.create_user, user_to_json))])
43}
44
45pub fn create_user(client: squall.Client, name: String) -> Result(Request(String), String) {
46 squall.prepare_request(
47 client,
48 "\n mutation CreateUser($name: String!) {\n createUser(name: $name) {\n id\n name\n }\n }\n ",
49 json.object([#("name", json.string(name))]),
50 )
51}
52
53pub fn parse_create_user_response(body: String) -> Result(CreateUserResponse, String) {
54 squall.parse_response(body, create_user_response_decoder())
55}
56