:: This library includes parsing functions for the json objects :: that Github's API produces. In general, the conversion from :: JSON to urbit types should be performed in marks, so those :: marks should include this library. :: /- gh |% ++ repository ^- $-(json (unit repository:gh)) =+ jo %- ot :~ 'id'^id 'name'^so 'full_name'^so 'owner'^user 'private'^bo 'html_url'^so 'description'^so 'fork'^bo 'url'^so 'forks_url'^so 'keys_url'^so 'collaborators_url'^so 'teams_url'^so 'hooks_url'^so 'issue_events_url'^so 'events_url'^so 'assignees_url'^so 'branches_url'^so 'tags_url'^so 'blobs_url'^so 'git_tags_url'^so 'git_refs_url'^so 'trees_url'^so 'statuses_url'^so 'languages_url'^so 'stargazers_url'^so 'contributors_url'^so 'subscribers_url'^so 'subscription_url'^so 'commits_url'^so 'git_commits_url'^so 'comments_url'^so 'issue_comment_url'^so 'contents_url'^so 'compare_url'^so 'merges_url'^so 'archive_url'^so 'downloads_url'^so 'issues_url'^so 'pulls_url'^so 'milestones_url'^so 'notifications_url'^so 'labels_url'^so 'releases_url'^so 'created_at'^so 'updated_at'^so 'pushed_at'^so 'git_url'^so 'ssh_url'^so 'clone_url'^so 'svn_url'^so 'homepage'^some 'size'^ni 'stargazers_count'^ni 'watchers_count'^ni 'language'^some 'has_issues'^bo 'has_downloads'^bo 'has_wiki'^bo 'has_pages'^bo 'forks_count'^ni 'mirror_url'^some 'open_issues_count'^ni 'forks'^ni 'open_issues'^ni 'watchers'^ni 'default_branch'^so == ++ user ^- $-(json (unit user:gh)) =+ jo %- ot :~ 'login'^so 'id'^id 'avatar_url'^so 'gravatar_id'^so 'url'^so 'html_url'^so 'followers_url'^so 'following_url'^so 'gists_url'^so 'starred_url'^so 'subscriptions_url'^so 'organizations_url'^so 'repos_url'^so 'events_url'^so 'received_events_url'^so 'type'^so 'site_admin'^bo == ++ issue ^- $-(json (unit issue:gh)) |= jon/json =- (bind - |*(issue/* `issue:gh`[jon issue])) %. jon =+ jo %- ot :~ 'url'^so 'labels_url'^so 'comments_url'^so 'events_url'^so 'html_url'^so 'id'^id 'number'^ni 'title'^so 'user'^user::|+(* (some *user:gh)) 'labels'^(ar label)::|+(* (some *(list label:gh)))::(ar label) 'state'^so 'locked'^bo 'assignee'^(mu user)::|+(* (some *(unit user:gh)))::(mu user) 'milestone'^some 'comments'^ni 'created_at'^so 'updated_at'^so 'closed_at'^(mu so) 'body'^so == ++ label ^- $-(json (unit label:gh)) =+ jo %- ot :~ 'url'^so 'name'^so 'color'^so == ++ comment ^- $-(json (unit comment:gh)) =+ jo %- ot :~ 'url'^so 'html_url'^so 'issue_url'^so 'id'^id 'user'^user 'created_at'^so 'updated_at'^so 'body'^so == ++ id no:jo ++ print-issue |= issue:gh ^- wain =+ c=(cury cat 3) :* :(c 'title: ' title ' (#' (rsh 3 2 (scot %ui number)) ')') (c 'state: ' state) (c 'creator: ' login.user) (c 'created-at: ' created-at) (c 'assignee: ' ?~(assignee 'none' login.u.assignee)) :: %+ c 'labels: ' ?~ labels '' |- ^- @t ?~ t.labels name.i.labels :(c name.i.t.labels ', ' $(t.labels t.t.labels)) :: (c 'comments: ' (rsh 3 2 (scot %ui comments))) (c 'url: ' url) '' %+ turn (lore body) :: strip carriage returns |= l/@t ?: =('' l) l ?. =('\0d' (rsh 3 (dec (met 3 l)) l)) l (end 3 (dec (met 3 l)) l) == --