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