Need help with rts?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

galeone
225 Stars 10 Forks Other 29 Commits 0 Opened issues

Description

RTS: request to struct. Generates Go structs from JSON server responses.

Services available

!
?

Need anything else?

Contributors list

# 60,097
Tensorf...
Go
SQLite
golang
25 commits
# 622,375
Go
json-se...
rts
1 commit

RTS: Request to Struct

GoDoc Build Status

Generate Go structs definitions from JSON server responses.

RTS defines type names using the specified lines in the route file and skipping numbers. e.g: a request to a route like

/users/1/posts
generates
type UsersPosts

It supports parameters: a line like

/users/:user/posts/:pid 1 200
generates
type UsersUserPostsPid
from the response to the request
GET /users/1/posts/200
.

RTS supports headers personalization as well, thus it can be used to generate types from responses protected by some authorization method

Install

CLI Application

go get -u github.com/galeone/rts/cmd/rts

CLI Usage

rts [options]
  -headers string
        Headers to add in every request
  -help
        prints this help
  -insecure
        Disables TLS Certificate check for HTTPS, use in case HTTPS Server Certificate is signed by an unknown authority
  -out string
        Output file. Stdout is used if not specified
  -pkg string
        Package name (default "main")
  -routes string
        Routes to request. One per line (default "routes.txt")
  -server string
        sets the server address (default "http://localhost:9090")
  -substruct
        Creates types for sub-structs

Examples

You can invoke

rts
piping from stdin a single JSON (anonymous) and get it converted to a go structure
echo '  {
    "Book Id": 30558257,
    "Title": "Unsouled (Cradle, #1)",
    "Author": "Will Wight",
    "Author l-f": "Wight, Will",
    "Additional Authors": "",
    "BCID": ""
  }' | ./rts

obtaining

package main

type Foo1 struct { Additional_Authors string json:"Additional Authors" Author string json:"Author" Author_l_f string json:"Author l-f" Bcid string json:"BCID" Book_Id int64 json:"Book Id" Title string json:"Title" }

Or you can define a more complex scenario, definining the

routes.txt
file with a line for each (parametric) request and use it as shown below.

routes.txt:

/
/repos/:user/:repo galeone igor

Run:

rts -server https://api.github.com -pkg example

Returns:

package example

type Foo1 struct { AuthorizationsURL string json:"authorizations_url" CodeSearchURL string json:"code_search_url" CommitSearchURL string json:"commit_search_url" CurrentUserAuthorizationsHTMLURL string json:"current_user_authorizations_html_url" CurrentUserRepositoriesURL string json:"current_user_repositories_url" CurrentUserURL string json:"current_user_url" EmailsURL string json:"emails_url" EmojisURL string json:"emojis_url" EventsURL string json:"events_url" FeedsURL string json:"feeds_url" FollowersURL string json:"followers_url" FollowingURL string json:"following_url" GistsURL string json:"gists_url" HubURL string json:"hub_url" IssueSearchURL string json:"issue_search_url" IssuesURL string json:"issues_url" KeysURL string json:"keys_url" LabelSearchURL string json:"label_search_url" NotificationsURL string json:"notifications_url" OrganizationRepositoriesURL string json:"organization_repositories_url" OrganizationTeamsURL string json:"organization_teams_url" OrganizationURL string json:"organization_url" PublicGistsURL string json:"public_gists_url" RateLimitURL string json:"rate_limit_url" RepositorySearchURL string json:"repository_search_url" RepositoryURL string json:"repository_url" StarredGistsURL string json:"starred_gists_url" StarredURL string json:"starred_url" UserOrganizationsURL string json:"user_organizations_url" UserRepositoriesURL string json:"user_repositories_url" UserSearchURL string json:"user_search_url" UserURL string json:"user_url" }

type ReposUserRepo struct { AllowForking bool json:"allow_forking" ArchiveURL string json:"archive_url" Archived bool json:"archived" AssigneesURL string json:"assignees_url" BlobsURL string json:"blobs_url" BranchesURL string json:"branches_url" CloneURL string json:"clone_url" CollaboratorsURL string json:"collaborators_url" CommentsURL string json:"comments_url" CommitsURL string json:"commits_url" CompareURL string json:"compare_url" ContentsURL string json:"contents_url" ContributorsURL string json:"contributors_url" CreatedAt string json:"created_at" DefaultBranch string json:"default_branch" DeploymentsURL string json:"deployments_url" Description string json:"description" Disabled bool json:"disabled" DownloadsURL string json:"downloads_url" EventsURL string json:"events_url" Fork bool json:"fork" Forks int64 json:"forks" ForksCount int64 json:"forks_count" ForksURL string json:"forks_url" FullName string json:"full_name" GitCommitsURL string json:"git_commits_url" GitRefsURL string json:"git_refs_url" GitTagsURL string json:"git_tags_url" GitURL string json:"git_url" HasDownloads bool json:"has_downloads" HasIssues bool json:"has_issues" HasPages bool json:"has_pages" HasProjects bool json:"has_projects" HasWiki bool json:"has_wiki" Homepage string json:"homepage" HooksURL string json:"hooks_url" HTMLURL string json:"html_url" ID int64 json:"id" IssueCommentURL string json:"issue_comment_url" IssueEventsURL string json:"issue_events_url" IssuesURL string json:"issues_url" KeysURL string json:"keys_url" LabelsURL string json:"labels_url" Language string json:"language" LanguagesURL string json:"languages_url" License struct { Key string json:"key" Name string json:"name" NodeID string json:"node_id" SpdxID string json:"spdx_id" URL string json:"url" } json:"license" MergesURL string json:"merges_url" MilestonesURL string json:"milestones_url" MirrorURL interface{} json:"mirror_url" Name string json:"name" NetworkCount int64 json:"network_count" NodeID string json:"node_id" NotificationsURL string json:"notifications_url" OpenIssues int64 json:"open_issues" OpenIssuesCount int64 json:"open_issues_count" Owner struct { AvatarURL string json:"avatar_url" EventsURL string json:"events_url" FollowersURL string json:"followers_url" FollowingURL string json:"following_url" GistsURL string json:"gists_url" GravatarID string json:"gravatar_id" HTMLURL string json:"html_url" ID int64 json:"id" Login string json:"login" NodeID string json:"node_id" OrganizationsURL string json:"organizations_url" ReceivedEventsURL string json:"received_events_url" ReposURL string json:"repos_url" SiteAdmin bool json:"site_admin" StarredURL string json:"starred_url" SubscriptionsURL string json:"subscriptions_url" Type string json:"type" URL string json:"url" } json:"owner" Private bool json:"private" PullsURL string json:"pulls_url" PushedAt string json:"pushed_at" ReleasesURL string json:"releases_url" Size int64 json:"size" SSHURL string json:"ssh_url" StargazersCount int64 json:"stargazers_count" StargazersURL string json:"stargazers_url" StatusesURL string json:"statuses_url" SubscribersCount int64 json:"subscribers_count" SubscribersURL string json:"subscribers_url" SubscriptionURL string json:"subscription_url" SvnURL string json:"svn_url" TagsURL string json:"tags_url" TeamsURL string json:"teams_url" TempCloneToken interface{} json:"temp_clone_token" TreesURL string json:"trees_url" UpdatedAt string json:"updated_at" URL string json:"url" Watchers int64 json:"watchers" WatchersCount int64 json:"watchers_count" }

Library

import "github.com/galeone/rts"

byteFile, err := rts.Do(pkg, server, lines, headerMap)

License

RTS: Request to Struct. Generates Go structs from a server response. Copyright (C) 2016-2021 Paolo Galeone [email protected]

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. Exhibit B is not attached; this software is compatible with the licenses expressed under Section 1.12 of the MPL v2.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.