// Package benchmark provides a simple benchmark for easyjson against default serialization and ffjson. // The data example is taken from https://dev.twitter.com/rest/reference/get/search/tweets package benchmark import ( "io/ioutil" ) var largeStructText, _ = ioutil.ReadFile("example.json") var xlStructData XLStruct func init() { for i := 0; i < 50; i++ { xlStructData.Data = append(xlStructData.Data, largeStructData) } } var smallStructText = []byte(`{"hashtags":[{"indices":[5, 10],"text":"some-text"}],"urls":[],"user_mentions":[]}`) var smallStructData = Entities{ Hashtags: []Hashtag{{Indices: []int{5, 10}, Text: "some-text"}}, Urls: []*string{}, UserMentions: []*string{}, } type SearchMetadata struct { CompletedIn float64 `json:"completed_in"` Count int `json:"count"` MaxID int64 `json:"max_id"` MaxIDStr string `json:"max_id_str"` NextResults string `json:"next_results"` Query string `json:"query"` RefreshURL string `json:"refresh_url"` SinceID int64 `json:"since_id"` SinceIDStr string `json:"since_id_str"` } type Hashtag struct { Indices []int `json:"indices"` Text string `json:"text"` } //easyjson:json type Entities struct { Hashtags []Hashtag `json:"hashtags"` Urls []*string `json:"urls"` UserMentions []*string `json:"user_mentions"` } type UserEntityDescription struct { Urls []*string `json:"urls"` } type URL struct { ExpandedURL *string `json:"expanded_url"` Indices []int `json:"indices"` URL string `json:"url"` } type UserEntityURL struct { Urls []URL `json:"urls"` } type UserEntities struct { Description UserEntityDescription `json:"description"` URL UserEntityURL `json:"url"` } type User struct { ContributorsEnabled bool `json:"contributors_enabled"` CreatedAt string `json:"created_at"` DefaultProfile bool `json:"default_profile"` DefaultProfileImage bool `json:"default_profile_image"` Description string `json:"description"` Entities UserEntities `json:"entities"` FavouritesCount int `json:"favourites_count"` FollowRequestSent *string `json:"follow_request_sent"` FollowersCount int `json:"followers_count"` Following *string `json:"following"` FriendsCount int `json:"friends_count"` GeoEnabled bool `json:"geo_enabled"` ID int `json:"id"` IDStr string `json:"id_str"` IsTranslator bool `json:"is_translator"` Lang string `json:"lang"` ListedCount int `json:"listed_count"` Location string `json:"location"` Name string `json:"name"` Notifications *string `json:"notifications"` ProfileBackgroundColor string `json:"profile_background_color"` ProfileBackgroundImageURL string `json:"profile_background_image_url"` ProfileBackgroundImageURLHTTPS string `json:"profile_background_image_url_https"` ProfileBackgroundTile bool `json:"profile_background_tile"` ProfileImageURL string `json:"profile_image_url"` ProfileImageURLHTTPS string `json:"profile_image_url_https"` ProfileLinkColor string `json:"profile_link_color"` ProfileSidebarBorderColor string `json:"profile_sidebar_border_color"` ProfileSidebarFillColor string `json:"profile_sidebar_fill_color"` ProfileTextColor string `json:"profile_text_color"` ProfileUseBackgroundImage bool `json:"profile_use_background_image"` Protected bool `json:"protected"` ScreenName string `json:"screen_name"` ShowAllInlineMedia bool `json:"show_all_inline_media"` StatusesCount int `json:"statuses_count"` TimeZone string `json:"time_zone"` URL *string `json:"url"` UtcOffset int `json:"utc_offset"` Verified bool `json:"verified"` } type StatusMetadata struct { IsoLanguageCode string `json:"iso_language_code"` ResultType string `json:"result_type"` } type Status struct { Contributors *string `json:"contributors"` Coordinates *string `json:"coordinates"` CreatedAt string `json:"created_at"` Entities Entities `json:"entities"` Favorited bool `json:"favorited"` Geo *string `json:"geo"` ID int64 `json:"id"` IDStr string `json:"id_str"` InReplyToScreenName *string `json:"in_reply_to_screen_name"` InReplyToStatusID *string `json:"in_reply_to_status_id"` InReplyToStatusIDStr *string `json:"in_reply_to_status_id_str"` InReplyToUserID *string `json:"in_reply_to_user_id"` InReplyToUserIDStr *string `json:"in_reply_to_user_id_str"` Metadata StatusMetadata `json:"metadata"` Place *string `json:"place"` RetweetCount int `json:"retweet_count"` Retweeted bool `json:"retweeted"` Source string `json:"source"` Text string `json:"text"` Truncated bool `json:"truncated"` User User `json:"user"` } //easyjson:json type LargeStruct struct { SearchMetadata SearchMetadata `json:"search_metadata"` Statuses []Status `json:"statuses"` } //easyjson:json type XLStruct struct { Data []LargeStruct }