import gleam/dynamic.{type Dynamic} import gleam/dynamic/decode import gleam/result // Errors that occur when trying to read beyond the end of the file. // pub type IoError { Eof } @external(erlang, "io", "get_line") fn ffi_get_line(prompt: String) -> Dynamic // Reads a line from stdin. // Returns an `Eof` error if you try to read beyond the end of the file. // pub fn read_line() -> Result(String, IoError) { ffi_get_line("") |> decode.run(decode.string) |> result.replace_error(Eof) } @external(erlang, "io", "get_chars") fn ffi_get_chars(prompt: String, count: Int) -> Dynamic // Reads up to `count` characters from stdin. // If `count` is greater than the stdin length // the function will return everything up to the end of the input. // Returns an `Eof` error if you try to read beyond the end of the file. // pub fn read_chars(count: Int) -> Result(String, IoError) { ffi_get_chars("", count) |> decode.run(decode.string) |> result.replace_error(Eof) }