import curl
import json::static
+import json
# Specific Curl that know hot to talk to the github API
class GithubCurl
# Get the requested URI, and check the HTTP response. Then convert to JSON
# and check for Github errors.
- fun get_and_check(uri: String): nullable Jsonable
+ fun get_and_check(uri: String): nullable Serializable
do
var request = new CurlHTTPRequest(uri)
request.user_agent = user_agent
if response isa CurlResponseSuccess then
var obj = response.body_str.parse_json
if obj isa JsonObject then
- if obj.keys.has("message") then
+ if obj.keys.has("message") and obj.keys.has("documentation_url") then
print "Message from Github API: {obj["message"] or else ""}"
print "Requested URI: {uri}"
abort
# Then convert to JSON and check for Github errors.
# Unlike `get_and_check`, error do not trigger an abort but
# are reported as `GithubError`.
- fun get_and_parse(uri: String): nullable Jsonable
+ fun get_and_parse(uri: String): nullable Serializable
do
var request = new CurlHTTPRequest(uri)
request.user_agent = user_agent
if response isa CurlResponseSuccess then
var obj = response.body_str.parse_json
if obj isa JsonObject then
- if obj.keys.has("message") then
+ if obj.keys.has("message") and obj.keys.has("documentation_url") then
var title = "GithubAPIError"
var msg = obj["message"].as(not null).to_s
var err = new GithubError(msg, title)
# Check the `json` value to find them.
class GithubError
super Error
- super Jsonable
+ super Serializable
# The name of the error.
var name: String