Type-safe GraphQL client generator for Gleam
at main 1.5 kB view raw
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