Thin GitHub API client for MoonBit built on gaato/http and gaato/sdk-runtime: the whole REST API generated, plus a GraphQL passthrough.
Dependencies
let gh = @github.GitHub::new(transport, clock, token="ghp_...")
let repo = gh.call(@gen.repos_get_request("gaato", "mbt-sdk"), @gen.repos_get_decode)
let diff = gh.send(
@gen.repos_compare_commits_request("gaato", "mbt-sdk", "main...topic")
.header("accept", "application/vnd.github.diff"),
)let repos = gh
.paginator(@gen.repos_list_for_user_request("gaato", per_page=100), @gen.repos_list_for_user_decode)
.collect(max=250)let data = gh.graphql(
query="query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { stargazerCount } }",
variables={ "owner": "gaato", "name": "mbt-sdk" },
)test {
let body : @github.ApiErrorBody = {
message: "Not Found",
documentation_url: Some("https://docs.github.com/rest"),
status: Some("404"),
errors: None,
}
assert_eq(body.message, "Not Found")
}pub struct GitHub {
// private fields
} let repo = gh.call(
@gen.repos_get_request("gaato", "mbt-sdk"),
@gen.repos_get_decode,
) let data = gh.graphql(
query=(
#|query($owner: String!, $name: String!) {
#| repository(owner: $owner, name: $name) { stargazerCount }
#|}
),
variables={ "owner": "gaato", "name": "mbt-sdk" },
) let issues = gh
.graphql_paginator(
data => {
guard data is Object(root) else { ... }
...
(nodes, if has_next_page { end_cursor } else { None })
},
query=(
#|query($cursor: String) {
#| repository(owner: "gaato", name: "mbt-sdk") {
#| issues(first: 100, after: $cursor) {
#| nodes { number title }
#| pageInfo { hasNextPage endCursor }
#| }
#| }
#|}
),
cursor_variable="cursor",
)
.collect(max=500)fn GitHub::new(transport : &Transport, clock : &Clock, token? : String, base_url? : String, api_version? : String, user_agent? : String, retry? : RetryPolicy, limiter? : &RateLimiter, graphql_url? : String) -> GitHub let repos = gh
.paginator(
@gen.repos_list_for_user_request("gaato", per_page=100),
@gen.repos_list_for_user_decode,
)
.collect(max=250)test {
let error : @github.GraphqlError = {
message: "Could not resolve to a Repository with the name 'o/r'.",
type_: Some("NOT_FOUND"),
path: Some(["repository"]),
locations: None,
extensions: None,
}
assert_eq(error.type_, Some("NOT_FOUND"))
} if @github.graphql_errors(error) is Some(errors) {
for error in errors {
if error.type_ is Some("RATE_LIMITED") { ... }
}
}Install
Download zipThin GitHub API client for MoonBit built on gaato/http and gaato/sdk-runtime: the whole REST API generated, plus a GraphQL passthrough.
Dependencies