class GithubClient class SuccessfulResponse getter data : HTTP::Client::Response def initialize(@data : HTTP::Client::Response) end end class RateLimitedResponse end def self.get_gist_response(id : String) : SuccessfulResponse | RateLimitedResponse new.get_gist_response(id) end def get_gist_response(id : String) : SuccessfulResponse | RateLimitedResponse client = HTTP::Client.new("api.github.com", tls: true) if username && password client.basic_auth(username, password) end response = client.get("/gists/#{id}") if response.status == HTTP::Status::FORBIDDEN && response.headers["X-RateLimit-Remaining"] == "0" RateLimitedResponse.new else SuccessfulResponse.new(response) end end private def username ENV["GITHUB_USERNAME"]? end private def password ENV["GITHUB_PERSONAL_ACCESS_TOKEN"]? end end