{"action":"created","comment":{"url":"https://api.github.com/repos/mxmCherry/openrtb/pulls/comments/224991597","pull_request_review_id":164496997,"id":224991597,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNDk5MTU5Nw==","diff_hunk":"@@ -0,0 +1,162 @@\n+// Package openrtb3 holds OpenRTB 3.0 types implementation\n+// (https://github.com/InteractiveAdvertisingBureau/openrtb)\n+package openrtb3\n+\n+import \"encoding/json\"\n+\n+// Body is a top-level wrapper for OpenRTB requests.\n+type Body struct {\n+\tOpenRTB OpenRTB `json:\"openrtb\"`\n+}\n+\n+// ----------------------------------------------------------------------------\n+\n+// OpenRTB is the top-level object is the root for both request and response payloads.\n+// It includes versioning information and references to the Layer-4 domain model on which transactions are based.\n+// By default, the domain model used by OpenRTB is the Advertising Common Object Model (AdCOM).\n+type OpenRTB struct {\n+\tVer        string    `json:\"ver,omitempty\"`        // Version of the Layer-3 OpenRTB specification (e.g., \"3.0\").\n+\tDomainSpec string    `json:\"domainspec,omitempty\"` // Default: \"adcom\" (const DefaultOpenRTBDomainSpec). Identifier of the Layer-4 domain model used to define items for sale, media associated with bids, etc.\n+\tDomainVer  string    `json:\"domainver\"`            // Required. Specification version of the Layer-4 domain model referenced in the “domainspec” attribute.\n+\tRequest    *Request  `json:\"request,omitempty\"`    // Required only for request payloads. Bid request container.\n+\tResponse   *Response `json:\"response,omitempty\"`   // Required only for response payloads. Bid response container.\n+\n+\t// Some of these attributes are optional.\n+\t// The \"ver\" attribute, for example, indicates the OpenRTB specification version to which this payload conforms.\n+\t// This is also conveyed in Layer-1 via an HTTP header.\n+\t// Its utility here is more to assist in diagnostics by making the payload more self-documenting outside the context of a runtime transaction.\n+\t//\n+\t// The \"domainver\" attribute, however, does have runtime utility since the structures of Layer-4 objects may vary over time based on their specification versions.\n+\t// This attribute can assist in invoking the correct domain object parser or unmarshalling code.\n+}\n+\n+// ----------------------------------------------------------------------------\n+\n+// Request object contains a globally unique bid request ID.\n+// This \"id\" attribute is required as is an Item array with at least one object (i.e., at least one item for sale).\n+// Other attributes establish rules and restrictions that apply to all items being offered.\n+// This object also interfaces to Layer-4 domain objects for context such as the user, device, site or app, etc.\n+type Request struct {\n+\tID      string          `json:\"id\"`                // Required. Unique ID of the bid request; provided by the exchange.\n+\tTest    Bool            `json:\"test,omitempty\"`    // Default: 0 (false). Indicator of test mode in which auctions are not billable, where 0 (false) = live mode, 1 (true) = test mode.\n+\tTMax    int64           `json:\"tmax,omitempty\"`    // Maximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout. This value supersedes any a priori guidance from the exchange. If an exchange acts as an intermediary, it should decrease the outbound \"tmax\" value from what it received to account for its latency and the additional internet hop.\n+\tAT      int8            `json:\"at,omitempty\"`      // Default: 2. Auction type, where 1 = First Price, 2 = Second Price Plus. Values greater than 500 can be used for exchange-specific auction types.\n+\tCur     []string        `json:\"cur,omitempty\"`     // Default: [\"USD\"]. Array of accepted currencies for bids on this bid request using ISO-4217 alpha codes. Recommended if the exchange accepts multiple currencies. If omitted, the single currency of \"USD\" is assumed.\n+\tSeat    []string        `json:\"seat,omitempty\"`    // Restriction list of buyer seats for bidding on this item. Knowledge of buyer’s customers and their seat IDs must be coordinated between parties a priori. Omission implies no restrictions.\n+\tWSeat   *Bool           `json:\"wseat,omitempty\"`   // Default: 1 (true). Flag that determines the restriction interpretation of the “seat” array, where 0 (false) = block list, 1 (true) = whitelist.\n+\tCData   string          `json:\"cdata,omitempty\"`   // Allows bidder to retrieve data set on its behalf in the exchange’s cookie (refer to “cdata” in Object: Response) if supported by the exchange. The string must be in base85 cookie-safe characters.\n+\tSource  *Source         `json:\"source,omitempty\"`  // A Source object that provides data about the inventory source and which entity makes the final decision.\n+\tItem    []Item          `json:\"item\"`              // Required. Array of Item objects (at least one) that constitute the set of goods being offered for sale.\n+\tPackage Bool            `json:\"package,omitempty\"` // Flag to indicate if the Exchange can verify that the items offered represent all of the items available in context (e.g., all impressions on a web page, all video spots such as pre/mid/post roll) to support road-blocking, where 0 = no, 1 = yes.","path":"openrtb3/openrtb3.go","position":50,"original_position":50,"commit_id":"9e40292b676262fb00e902570dc340dbb61c280d","original_commit_id":"9e40292b676262fb00e902570dc340dbb61c280d","user":{"login":"mxmCherry","id":5172338,"node_id":"MDQ6VXNlcjUxNzIzMzg=","avatar_url":"https://avatars1.githubusercontent.com/u/5172338?v=4","gravatar_id":"","url":"https://api.github.com/users/mxmCherry","html_url":"https://github.com/mxmCherry","followers_url":"https://api.github.com/users/mxmCherry/followers","following_url":"https://api.github.com/users/mxmCherry/following{/other_user}","gists_url":"https://api.github.com/users/mxmCherry/gists{/gist_id}","starred_url":"https://api.github.com/users/mxmCherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxmCherry/subscriptions","organizations_url":"https://api.github.com/users/mxmCherry/orgs","repos_url":"https://api.github.com/users/mxmCherry/repos","events_url":"https://api.github.com/users/mxmCherry/events{/privacy}","received_events_url":"https://api.github.com/users/mxmCherry/received_events","type":"User","site_admin":false},"body":"I've already bumped into this `omitempty` when doing tests (`testdata/request.json`). Not sure if `0`/absence really has much sense, but still - a candidate to become a pointer.","created_at":"2018-10-14T12:49:46Z","updated_at":"2018-10-14T12:58:47Z","html_url":"https://github.com/mxmCherry/openrtb/pull/31#discussion_r224991597","pull_request_url":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/mxmCherry/openrtb/pulls/comments/224991597"},"html":{"href":"https://github.com/mxmCherry/openrtb/pull/31#discussion_r224991597"},"pull_request":{"href":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31"}}},"pull_request":{"url":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31","id":222712815,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIyNzEyODE1","html_url":"https://github.com/mxmCherry/openrtb/pull/31","diff_url":"https://github.com/mxmCherry/openrtb/pull/31.diff","patch_url":"https://github.com/mxmCherry/openrtb/pull/31.patch","issue_url":"https://api.github.com/repos/mxmCherry/openrtb/issues/31","number":31,"state":"open","locked":false,"title":"openrtb3","user":{"login":"mxmCherry","id":5172338,"node_id":"MDQ6VXNlcjUxNzIzMzg=","avatar_url":"https://avatars1.githubusercontent.com/u/5172338?v=4","gravatar_id":"","url":"https://api.github.com/users/mxmCherry","html_url":"https://github.com/mxmCherry","followers_url":"https://api.github.com/users/mxmCherry/followers","following_url":"https://api.github.com/users/mxmCherry/following{/other_user}","gists_url":"https://api.github.com/users/mxmCherry/gists{/gist_id}","starred_url":"https://api.github.com/users/mxmCherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxmCherry/subscriptions","organizations_url":"https://api.github.com/users/mxmCherry/orgs","repos_url":"https://api.github.com/users/mxmCherry/repos","events_url":"https://api.github.com/users/mxmCherry/events{/privacy}","received_events_url":"https://api.github.com/users/mxmCherry/received_events","type":"User","site_admin":false},"body":"This is a long-running PR. Probably, will be hanging here for a few weeks (at least).\r\n\r\nMain blockers:\r\n\r\n- [ ] https://github.com/InteractiveAdvertisingBureau/openrtb/issues/10\r\n- [ ] needs [AdCom](https://github.com/InteractiveAdvertisingBureau/AdCOM) [v1.0 BETA](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20BETA%201.0.md) implementation (in a separate PR, as `github.com/mxmCherry/openrtb/adcom` subpackage) ready before merging this","created_at":"2018-10-14T12:33:54Z","updated_at":"2018-10-14T12:58:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e28f707093c9b0d78a511cd86a921834f5ec9459","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31/commits","review_comments_url":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31/comments","review_comment_url":"https://api.github.com/repos/mxmCherry/openrtb/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mxmCherry/openrtb/issues/31/comments","statuses_url":"https://api.github.com/repos/mxmCherry/openrtb/statuses/9e40292b676262fb00e902570dc340dbb61c280d","head":{"label":"mxmCherry:feature/openrtb3","ref":"feature/openrtb3","sha":"9e40292b676262fb00e902570dc340dbb61c280d","user":{"login":"mxmCherry","id":5172338,"node_id":"MDQ6VXNlcjUxNzIzMzg=","avatar_url":"https://avatars1.githubusercontent.com/u/5172338?v=4","gravatar_id":"","url":"https://api.github.com/users/mxmCherry","html_url":"https://github.com/mxmCherry","followers_url":"https://api.github.com/users/mxmCherry/followers","following_url":"https://api.github.com/users/mxmCherry/following{/other_user}","gists_url":"https://api.github.com/users/mxmCherry/gists{/gist_id}","starred_url":"https://api.github.com/users/mxmCherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxmCherry/subscriptions","organizations_url":"https://api.github.com/users/mxmCherry/orgs","repos_url":"https://api.github.com/users/mxmCherry/repos","events_url":"https://api.github.com/users/mxmCherry/events{/privacy}","received_events_url":"https://api.github.com/users/mxmCherry/received_events","type":"User","site_admin":false},"repo":{"id":34744339,"node_id":"MDEwOlJlcG9zaXRvcnkzNDc0NDMzOQ==","name":"openrtb","full_name":"mxmCherry/openrtb","private":false,"owner":{"login":"mxmCherry","id":5172338,"node_id":"MDQ6VXNlcjUxNzIzMzg=","avatar_url":"https://avatars1.githubusercontent.com/u/5172338?v=4","gravatar_id":"","url":"https://api.github.com/users/mxmCherry","html_url":"https://github.com/mxmCherry","followers_url":"https://api.github.com/users/mxmCherry/followers","following_url":"https://api.github.com/users/mxmCherry/following{/other_user}","gists_url":"https://api.github.com/users/mxmCherry/gists{/gist_id}","starred_url":"https://api.github.com/users/mxmCherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxmCherry/subscriptions","organizations_url":"https://api.github.com/users/mxmCherry/orgs","repos_url":"https://api.github.com/users/mxmCherry/repos","events_url":"https://api.github.com/users/mxmCherry/events{/privacy}","received_events_url":"https://api.github.com/users/mxmCherry/received_events","type":"User","site_admin":false},"html_url":"https://github.com/mxmCherry/openrtb","description":"OpenRTB v2.5 / Native v1.2 types for Go programming language (Golang)","fork":false,"url":"https://api.github.com/repos/mxmCherry/openrtb","forks_url":"https://api.github.com/repos/mxmCherry/openrtb/forks","keys_url":"https://api.github.com/repos/mxmCherry/openrtb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mxmCherry/openrtb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mxmCherry/openrtb/teams","hooks_url":"https://api.github.com/repos/mxmCherry/openrtb/hooks","issue_events_url":"https://api.github.com/repos/mxmCherry/openrtb/issues/events{/number}","events_url":"https://api.github.com/repos/mxmCherry/openrtb/events","assignees_url":"https://api.github.com/repos/mxmCherry/openrtb/assignees{/user}","branches_url":"https://api.github.com/repos/mxmCherry/openrtb/branches{/branch}","tags_url":"https://api.github.com/repos/mxmCherry/openrtb/tags","blobs_url":"https://api.github.com/repos/mxmCherry/openrtb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mxmCherry/openrtb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mxmCherry/openrtb/git/refs{/sha}","trees_url":"https://api.github.com/repos/mxmCherry/openrtb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mxmCherry/openrtb/statuses/{sha}","languages_url":"https://api.github.com/repos/mxmCherry/openrtb/languages","stargazers_url":"https://api.github.com/repos/mxmCherry/openrtb/stargazers","contributors_url":"https://api.github.com/repos/mxmCherry/openrtb/contributors","subscribers_url":"https://api.github.com/repos/mxmCherry/openrtb/subscribers","subscription_url":"https://api.github.com/repos/mxmCherry/openrtb/subscription","commits_url":"https://api.github.com/repos/mxmCherry/openrtb/commits{/sha}","git_commits_url":"https://api.github.com/repos/mxmCherry/openrtb/git/commits{/sha}","comments_url":"https://api.github.com/repos/mxmCherry/openrtb/comments{/number}","issue_comment_url":"https://api.github.com/repos/mxmCherry/openrtb/issues/comments{/number}","contents_url":"https://api.github.com/repos/mxmCherry/openrtb/contents/{+path}","compare_url":"https://api.github.com/repos/mxmCherry/openrtb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mxmCherry/openrtb/merges","archive_url":"https://api.github.com/repos/mxmCherry/openrtb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mxmCherry/openrtb/downloads","issues_url":"https://api.github.com/repos/mxmCherry/openrtb/issues{/number}","pulls_url":"https://api.github.com/repos/mxmCherry/openrtb/pulls{/number}","milestones_url":"https://api.github.com/repos/mxmCherry/openrtb/milestones{/number}","notifications_url":"https://api.github.com/repos/mxmCherry/openrtb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mxmCherry/openrtb/labels{/name}","releases_url":"https://api.github.com/repos/mxmCherry/openrtb/releases{/id}","deployments_url":"https://api.github.com/repos/mxmCherry/openrtb/deployments","created_at":"2015-04-28T17:07:07Z","updated_at":"2018-10-12T19:30:37Z","pushed_at":"2018-10-14T12:36:11Z","git_url":"git://github.com/mxmCherry/openrtb.git","ssh_url":"git@github.com:mxmCherry/openrtb.git","clone_url":"https://github.com/mxmCherry/openrtb.git","svn_url":"https://github.com/mxmCherry/openrtb","homepage":"","size":256,"stargazers_count":62,"watchers_count":62,"language":"Go","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":26,"mirror_url":null,"archived":false,"open_issues_count":3,"license":{"key":"unlicense","name":"The Unlicense","spdx_id":"Unlicense","url":"https://api.github.com/licenses/unlicense","node_id":"MDc6TGljZW5zZTE1"},"forks":26,"open_issues":3,"watchers":62,"default_branch":"master"}},"base":{"label":"mxmCherry:master","ref":"master","sha":"39d0e974b2f73eedac8ea9799c6625df7735a47d","user":{"login":"mxmCherry","id":5172338,"node_id":"MDQ6VXNlcjUxNzIzMzg=","avatar_url":"https://avatars1.githubusercontent.com/u/5172338?v=4","gravatar_id":"","url":"https://api.github.com/users/mxmCherry","html_url":"https://github.com/mxmCherry","followers_url":"https://api.github.com/users/mxmCherry/followers","following_url":"https://api.github.com/users/mxmCherry/following{/other_user}","gists_url":"https://api.github.com/users/mxmCherry/gists{/gist_id}","starred_url":"https://api.github.com/users/mxmCherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxmCherry/subscriptions","organizations_url":"https://api.github.com/users/mxmCherry/orgs","repos_url":"https://api.github.com/users/mxmCherry/repos","events_url":"https://api.github.com/users/mxmCherry/events{/privacy}","received_events_url":"https://api.github.com/users/mxmCherry/received_events","type":"User","site_admin":false},"repo":{"id":34744339,"node_id":"MDEwOlJlcG9zaXRvcnkzNDc0NDMzOQ==","name":"openrtb","full_name":"mxmCherry/openrtb","private":false,"owner":{"login":"mxmCherry","id":5172338,"node_id":"MDQ6VXNlcjUxNzIzMzg=","avatar_url":"https://avatars1.githubusercontent.com/u/5172338?v=4","gravatar_id":"","url":"https://api.github.com/users/mxmCherry","html_url":"https://github.com/mxmCherry","followers_url":"https://api.github.com/users/mxmCherry/followers","following_url":"https://api.github.com/users/mxmCherry/following{/other_user}","gists_url":"https://api.github.com/users/mxmCherry/gists{/gist_id}","starred_url":"https://api.github.com/users/mxmCherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxmCherry/subscriptions","organizations_url":"https://api.github.com/users/mxmCherry/orgs","repos_url":"https://api.github.com/users/mxmCherry/repos","events_url":"https://api.github.com/users/mxmCherry/events{/privacy}","received_events_url":"https://api.github.com/users/mxmCherry/received_events","type":"User","site_admin":false},"html_url":"https://github.com/mxmCherry/openrtb","description":"OpenRTB v2.5 / Native v1.2 types for Go programming language (Golang)","fork":false,"url":"https://api.github.com/repos/mxmCherry/openrtb","forks_url":"https://api.github.com/repos/mxmCherry/openrtb/forks","keys_url":"https://api.github.com/repos/mxmCherry/openrtb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mxmCherry/openrtb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mxmCherry/openrtb/teams","hooks_url":"https://api.github.com/repos/mxmCherry/openrtb/hooks","issue_events_url":"https://api.github.com/repos/mxmCherry/openrtb/issues/events{/number}","events_url":"https://api.github.com/repos/mxmCherry/openrtb/events","assignees_url":"https://api.github.com/repos/mxmCherry/openrtb/assignees{/user}","branches_url":"https://api.github.com/repos/mxmCherry/openrtb/branches{/branch}","tags_url":"https://api.github.com/repos/mxmCherry/openrtb/tags","blobs_url":"https://api.github.com/repos/mxmCherry/openrtb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mxmCherry/openrtb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mxmCherry/openrtb/git/refs{/sha}","trees_url":"https://api.github.com/repos/mxmCherry/openrtb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mxmCherry/openrtb/statuses/{sha}","languages_url":"https://api.github.com/repos/mxmCherry/openrtb/languages","stargazers_url":"https://api.github.com/repos/mxmCherry/openrtb/stargazers","contributors_url":"https://api.github.com/repos/mxmCherry/openrtb/contributors","subscribers_url":"https://api.github.com/repos/mxmCherry/openrtb/subscribers","subscription_url":"https://api.github.com/repos/mxmCherry/openrtb/subscription","commits_url":"https://api.github.com/repos/mxmCherry/openrtb/commits{/sha}","git_commits_url":"https://api.github.com/repos/mxmCherry/openrtb/git/commits{/sha}","comments_url":"https://api.github.com/repos/mxmCherry/openrtb/comments{/number}","issue_comment_url":"https://api.github.com/repos/mxmCherry/openrtb/issues/comments{/number}","contents_url":"https://api.github.com/repos/mxmCherry/openrtb/contents/{+path}","compare_url":"https://api.github.com/repos/mxmCherry/openrtb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mxmCherry/openrtb/merges","archive_url":"https://api.github.com/repos/mxmCherry/openrtb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mxmCherry/openrtb/downloads","issues_url":"https://api.github.com/repos/mxmCherry/openrtb/issues{/number}","pulls_url":"https://api.github.com/repos/mxmCherry/openrtb/pulls{/number}","milestones_url":"https://api.github.com/repos/mxmCherry/openrtb/milestones{/number}","notifications_url":"https://api.github.com/repos/mxmCherry/openrtb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mxmCherry/openrtb/labels{/name}","releases_url":"https://api.github.com/repos/mxmCherry/openrtb/releases{/id}","deployments_url":"https://api.github.com/repos/mxmCherry/openrtb/deployments","created_at":"2015-04-28T17:07:07Z","updated_at":"2018-10-12T19:30:37Z","pushed_at":"2018-10-14T12:36:11Z","git_url":"git://github.com/mxmCherry/openrtb.git","ssh_url":"git@github.com:mxmCherry/openrtb.git","clone_url":"https://github.com/mxmCherry/openrtb.git","svn_url":"https://github.com/mxmCherry/openrtb","homepage":"","size":256,"stargazers_count":62,"watchers_count":62,"language":"Go","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":26,"mirror_url":null,"archived":false,"open_issues_count":3,"license":{"key":"unlicense","name":"The Unlicense","spdx_id":"Unlicense","url":"https://api.github.com/licenses/unlicense","node_id":"MDc6TGljZW5zZTE1"},"forks":26,"open_issues":3,"watchers":62,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31"},"html":{"href":"https://github.com/mxmCherry/openrtb/pull/31"},"issue":{"href":"https://api.github.com/repos/mxmCherry/openrtb/issues/31"},"comments":{"href":"https://api.github.com/repos/mxmCherry/openrtb/issues/31/comments"},"review_comments":{"href":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31/comments"},"review_comment":{"href":"https://api.github.com/repos/mxmCherry/openrtb/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mxmCherry/openrtb/pulls/31/commits"},"statuses":{"href":"https://api.github.com/repos/mxmCherry/openrtb/statuses/9e40292b676262fb00e902570dc340dbb61c280d"}},"author_association":"OWNER"}}
{"actor":{"display_login":"mxmCherry"}}