Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

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


CLI Application

go get -u

CLI Usage

rts [options]
  -headers string
    	Headers to add in every request
    	prints this help
    	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")
    	Creates types for sub-structs


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


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.


/repos/:user/:repo galeone igor


rts -server -pkg example


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"`
	TopicSearchURL                   string `json:"topic_search_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"`
	IsTemplate               bool               `json:"is_template"`
	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                  ReposUserRepo_sub1 `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                    ReposUserRepo_sub2 `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"`
	Topics                   []string           `json:"topics"`
	TreesURL                 string             `json:"trees_url"`
	UpdatedAt                string             `json:"updated_at"`
	URL                      string             `json:"url"`
	Visibility               string             `json:"visibility"`
	Watchers                 int64              `json:"watchers"`
	WatchersCount            int64              `json:"watchers_count"`
	WebCommitSignoffRequired bool               `json:"web_commit_signoff_required"`

type ReposUserRepo_sub2 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"`

type ReposUserRepo_sub1 struct {
	Key    string `json:"key"`
	Name   string `json:"name"`
	NodeID string `json:"node_id"`
	SpdxID string `json:"spdx_id"`
	URL    string `json:"url"`


import ""

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


RTS: Request to Struct. Generates Go structs from a server response. Copyright (C) 2016-2022 Paolo Galeone

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 Exhibit B is not attached; this software is compatible with the licenses expressed under Section 1.12 of the MPL v2.


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







Sponsor this project



No packages published