diff options
Diffstat (limited to 'aoc2023/build/packages/adglent/src/priv/aoc_client.gleam')
-rw-r--r-- | aoc2023/build/packages/adglent/src/priv/aoc_client.gleam | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam new file mode 100644 index 0000000..e18bafa --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam @@ -0,0 +1,37 @@ +import gleam/result.{try} +import gleam/httpc +import gleam/http/request +import gleam/int +import gleam/string + +pub fn get_input( + year: String, + day: String, + session: String, +) -> Result(String, String) { + let url = "https://adventofcode.com/" <> year <> "/day/" <> day <> "/input" + use request <- try( + request.to(url) + |> result.map_error(fn(error) { + "Could not create request for \"" <> url <> "\": " <> string.inspect( + error, + ) + }), + ) + + // Send the HTTP request to the server + use response <- try( + request + |> request.prepend_header("Accept", "application/json") + |> request.prepend_header("Cookie", "session=" <> session <> ";") + |> httpc.send + |> result.map_error(fn(error) { + "Error when requesting \"" <> url <> "\": " <> string.inspect(error) + }), + ) + + case response.status { + status if status >= 200 && status < 300 -> Ok(response.body) + status -> Error(int.to_string(status) <> " - " <> response.body) + } +} |