mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 07:14:46 +00:00
Add HTTP error handling to CLI example
This commit is contained in:
parent
dba526bb3e
commit
a3c7dc494b
4 changed files with 17 additions and 17 deletions
|
@ -9,8 +9,8 @@ main =
|
||||||
|
|
||||||
url <- await Stdin.line
|
url <- await Stdin.line
|
||||||
|
|
||||||
{} <- await (Stdout.line "The contents of \(url) are:\n")
|
result <- Task.attempt (Http.getUtf8 url)
|
||||||
|
|
||||||
contents <- await (Http.getUtf8 url)
|
when result is
|
||||||
|
Ok contents -> Stdout.line "The contents of \(url) are:\n\(contents)"
|
||||||
Stdout.line contents
|
Err err -> Stdout.line "Error retrieving \(url) - error was: \(err)"
|
||||||
|
|
|
@ -2,5 +2,5 @@ interface Http
|
||||||
exposes [ getUtf8 ]
|
exposes [ getUtf8 ]
|
||||||
imports [ fx.Effect, Task ] # TODO FIXME Task.{ Task }
|
imports [ fx.Effect, Task ] # TODO FIXME Task.{ Task }
|
||||||
|
|
||||||
getUtf8 : Str -> Task.Task Str *
|
getUtf8 : Str -> Task.Task Str Str
|
||||||
getUtf8 = \url -> Effect.map (Effect.httpGetUtf8 url) Ok
|
getUtf8 = \url -> Effect.httpGetUtf8 url
|
||||||
|
|
|
@ -8,7 +8,7 @@ platform rtfeldman/roc-cli
|
||||||
{
|
{
|
||||||
putChar : I64 -> Effect {},
|
putChar : I64 -> Effect {},
|
||||||
putLine : Str -> Effect {},
|
putLine : Str -> Effect {},
|
||||||
httpGetUtf8 : Str -> Effect Str,
|
httpGetUtf8 : Str -> Effect (Result Str Str),
|
||||||
getLine : Effect Str
|
getLine : Effect Str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,16 +45,16 @@ pub fn roc_fx_putLine(line: RocStr) -> () {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub fn roc_fx_httpGetUtf8(url: RocStr) -> RocStr {
|
pub fn roc_fx_httpGetUtf8(url: RocStr) -> RocResult<RocStr, RocStr> {
|
||||||
let body = ureq::get(unsafe { url.as_str() })
|
match ureq::get(unsafe { url.as_str() }).call() {
|
||||||
.call()
|
Ok(resp) => match resp.into_string() {
|
||||||
.unwrap_or_else(|err| todo!("Report this HTTP error: {:?}", err));
|
Ok(contents) => RocResult::Ok(RocStr::from_slice(contents.as_bytes())), // TODO make roc::Result!
|
||||||
|
// TODO turn this error into an enum!
|
||||||
let str = body
|
Err(err) => RocResult::Err(RocStr::from_slice(format!("{:?}", err).as_bytes())),
|
||||||
.into_string()
|
},
|
||||||
.unwrap_or_else(|err| todo!("Report this body.text() error: {:?}", err));
|
// TODO turn this error into an enum!
|
||||||
|
Err(err) => RocResult::Err(RocStr::from_slice(format!("{:?}", err).as_bytes())),
|
||||||
RocStr::from_slice(str.as_bytes())
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue