index {
   text(":3\nwelcome to the root")
}

hello() {
   response("Hello World!", "text", 200)
}

#[route("/example")]
example() {
   html(http::get("https://example.org").body)
}

#[route("/db")]
db() {
   let db = kv::load("test.db");
   
   db.set("some.key", json::dump(#{name: "John", id: 50}));
   let data = json::parse(db.get("some.key"));
   
   json(data)
}

#[route("/example/{id}.txt")]
example(id) {
   text("base: " + id)
}

#[route("/example/{id}/test")]
example_test(id) {
   text("sub: " + id)
}

#[route("/name/{id}/{name}")]
name(id, name) {
   json(#{name: name, id: id})
}

example/json() {
   let res = http::get("https://httpbin.org/json");
   let body = #{ 
      response: res.json(),
      info: #{
         length: res.length,
         status: res.status,
         error: res.error,
         body: res.body,
      },
   };
   
   json(body)
}

example/post/bin() {
   let body = #{ 
      hello: "world",
      url: url,
   };
   
   json(http::post("https://httpbin.org/post", body).raw())
}

test.json() {
   let res = #{
       hello: "world",
       info: #{
         path: request.path,
         url: request.url,
         ver: request.version,
         query: request.query,
       }
   };
   
   json(res)
}

test/loadfile() {
   let file = open_file("test.html");
   html(file.read_string())
}

// remove to test 404 route
* {
   text("this is a wildcard route\ncurrently on: " + path)
}

404 {
   text("404 page")
}