// http.vr — the HTTP client (needs network access).
//   vr run examples/http.vr
//
// http.get / http.post return a struct with `status` (int) and `body`
// (string). Network failures throw and can be caught with try/catch;
// HTTP-level errors (404, 500) come back as normal responses.

import http
import json

fn main() {
	let res = http.get("https://httpbin.org/get")
	println("status: " + str(res.status))

	let data = json.decode(res.body)
	println("your IP (from httpbin): " + str(data.origin))

	let post = http.post("https://httpbin.org/post", "name=vuurraaf")
	let echo = json.decode(post.body)
	println("echoed: " + str(echo.data))

	// a 404 is a response, not an exception
	let nf = http.get("https://httpbin.org/status/404")
	println("not found status: " + str(nf.status))

	// network failures are catchable
	try {
		http.get("http://127.0.0.1:1/nope")
		println("unreachable")
	} catch e {
		println("caught connection error")
	}
	println("done")
}
