Packages

Generate OG images from Lustre elements

Current section

Files

Jump to
og_image src og_image fetch.gleam
Raw

src/og_image/fetch.gleam

//// HTTP fetching for Erlang target using gleam_httpc
//// Only compiled on Erlang target
@target(erlang)
import gleam/http/request
@target(erlang)
import gleam/httpc
@target(erlang)
import gleam/list
@target(erlang)
import gleam/result
@target(erlang)
/// Fetch all URLs and return a list of (url, bytes) tuples
/// Failed fetches are silently skipped
pub fn fetch_all(urls: List(String)) -> List(#(String, BitArray)) {
urls
|> list.filter_map(fn(url) {
case fetch_url(url) {
Ok(bytes) -> Ok(#(url, bytes))
Error(_) -> Error(Nil)
}
})
}
@target(erlang)
fn fetch_url(url: String) -> Result(BitArray, Nil) {
use req <- result.try(request.to(url) |> result.replace_error(Nil))
let req = request.set_body(req, <<>>)
use resp <- result.try(httpc.send_bits(req) |> result.replace_error(Nil))
case resp.status {
200 -> Ok(resp.body)
_ -> Error(Nil)
}
}