Type-safe GraphQL client generator for Gleam
1import gleam/http/request
2import gleam/io
3import gleam/result
4
5import squall
6
7// Import the generated GraphQL code
8import graphql/get_character
9import graphql/get_character_with_fragment
10
11// For Erlang target (default)
12import gleam/httpc
13
14// For JavaScript target: comment out httpc above and uncomment these
15// import gleam/javascript/promise
16// import gleam/fetch
17
18pub fn main() {
19 let client = squall.new("https://rickandmortyapi.com/graphql", [])
20
21 // Example 1: Simple query
22 io.println("=== Simple Query ===")
23 let assert Ok(request) = get_character.get_character(client, "1")
24 let assert Ok(body) = send_erlang(request)
25 io.println(body)
26
27 // Example 2: Query with fragments
28 io.println("\n=== Query with Fragments ===")
29 let assert Ok(request) =
30 get_character_with_fragment.get_character_with_fragment(client, "1")
31 let assert Ok(body) = send_erlang(request)
32 io.println(body)
33}
34
35// ==================== ERLANG HTTP CLIENT ====================
36fn send_erlang(request: request.Request(String)) -> Result(String, String) {
37 httpc.send(request)
38 |> result.map(fn(resp) { resp.body })
39 |> result.map_error(fn(_) { "HTTP request failed" })
40}
41// ==================== JAVASCRIPT HTTP CLIENT ====================
42// Uncomment this function when using JavaScript target
43//
44// fn send_javascript(
45// request: Request(String),
46// ) -> promise.Promise(Result(String, String)) {
47// fetch.send(request)
48// |> promise.try_await(fetch.read_text_body)
49// |> promise.map(fn(result) {
50// result
51// |> result.map(fn(resp) { resp.body })
52// |> result.map_error(fn(_) { "HTTP request failed" })
53// })
54// }