{"action":"created","comment":{"url":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/comments/57348999","id":57348999,"diff_hunk":"@@ -0,0 +1,379 @@\n+package storage\n+\n+import (\n+\t\"bytes\"\n+\t\"encoding/json\"\n+\t\"fmt\"\n+\t\"io\"\n+\t\"net/http\"\n+\t\"net/url\"\n+\t\"reflect\"\n+)\n+\n+const (\n+\tpartitionKeyNode                    = \"PartitionKey\"\n+\trowKeyNode                          = \"RowKey\"\n+\ttag                                 = \"table\"\n+\ttagIgnore                           = \"-\"\n+\tcontinuationTokenPartitionKeyHeader = \"X-Ms-Continuation-Nextpartitionkey\"\n+\tcontinuationTokenRowHeader          = \"X-Ms-Continuation-Nextrowkey\"\n+\tmaxTopParameter                     = 1000\n+)\n+\n+type queryTablesResponse struct {\n+\tTableName []struct {\n+\t\tTableName string `json:\"TableName\"`\n+\t} `json:\"value\"`\n+}\n+\n+// TableEntity interface specifies\n+// the functions needed to support\n+// marshaling and unmarshaling into\n+// Azure Tables. The struct must only contain\n+// simple types because Azure Tables do not\n+// support hierarchy.\n+type TableEntity interface {\n+\tPartitionKey() string\n+\tRowKey() string\n+\tSetPartitionKey(string) error\n+\tSetRowKey(string) error\n+}\n+\n+// ContinuationToken is an opaque (ie not useful to inspect)\n+// struct that Get... methods can return if there are more\n+// entries to be returned than the ones already\n+// returned. Just pass it to the same function to continue\n+// receiving the remaining entries.\n+type ContinuationToken struct {\n+\tNextPartitionKey string\n+\tNextRowKey       string\n+}\n+\n+type getTableEntriesResponse struct {\n+\tElements []map[string]interface{} `json:\"value\"`\n+}\n+\n+// QueryTableEntities queries the specified table and returns the unmarshaled\n+// entities of type retType.\n+// top parameter limits the returned entries up to top. Maximum top\n+// allowed by Azure API is 1000. In case there are more than top entries to be\n+// returned the function will return a non nil *ContinuationToken. You can call the\n+// same function again passing the received ContinuationToken as previousContToken\n+// parameter in order to get the following entries. The query parameter\n+// is the odata query. To retrieve all the entries pass the empty string.\n+// The function returns a pointer to a TableEntity slice, the *ContinuationToken\n+// if there are more entries to be returned and an error in case something went\n+// wrong.\n+//\n+// Example:\n+// \t\tentities, cToken, err = tSvc.QueryTableEntities(\"table\", cToken, reflect.TypeOf(entity), 20, \"\")\n+func (c *TableServiceClient) QueryTableEntities(tableName AzureTable, previousContToken *ContinuationToken, retType reflect.Type, top int, query string) (*[]TableEntity, *ContinuationToken, error) {\n+\tif top > maxTopParameter {\n+\t\treturn nil, nil, fmt.Errorf(\"Top accepts at maximum %d elements. Requested %d instead.\", maxTopParameter, top)\n+\t}\n+\n+\turi := c.client.getEndpoint(tableServiceName, pathForTable(tableName), url.Values{})\n+\turi += fmt.Sprintf(\"?$top=%d\", top)\n+\tif query != \"\" {\n+\t\turi += fmt.Sprintf(\"&$filter=%s\", url.QueryEscape(query))\n+\t}\n+\n+\tif previousContToken != nil {\n+\t\turi += fmt.Sprintf(\"&NextPartitionKey=%s&NextRowKey=%s\", previousContToken.NextPartitionKey, previousContToken.NextRowKey)\n+\t}\n+\n+\theaders := c.getStandardHeaders()\n+\n+\theaders[\"Content-Length\"] = \"0\"\n+\n+\tresp, err := c.client.execTable(\"GET\", uri, headers, nil)\n+\n+\tcontToken := extractContinuationTokenFromHeaders(resp.headers)\n+\n+\tif err != nil {\n+\t\treturn nil, contToken, err","path":"storage/table_entities.go","position":94,"original_position":94,"commit_id":"beef9429f8d01e15889ddb03f75d23a0096c71be","original_commit_id":"beef9429f8d01e15889ddb03f75d23a0096c71be","user":{"login":"ahmetalpbalkan","id":159209,"avatar_url":"https://avatars.githubusercontent.com/u/159209?v=3","gravatar_id":"","url":"https://api.github.com/users/ahmetalpbalkan","html_url":"https://github.com/ahmetalpbalkan","followers_url":"https://api.github.com/users/ahmetalpbalkan/followers","following_url":"https://api.github.com/users/ahmetalpbalkan/following{/other_user}","gists_url":"https://api.github.com/users/ahmetalpbalkan/gists{/gist_id}","starred_url":"https://api.github.com/users/ahmetalpbalkan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ahmetalpbalkan/subscriptions","organizations_url":"https://api.github.com/users/ahmetalpbalkan/orgs","repos_url":"https://api.github.com/users/ahmetalpbalkan/repos","events_url":"https://api.github.com/users/ahmetalpbalkan/events{/privacy}","received_events_url":"https://api.github.com/users/ahmetalpbalkan/received_events","type":"User","site_admin":false},"body":"@MindFlavor hmm that's a lot of unnecessary checks there, first of all `extractContinuationTokenFromHeaders` should take `http.Header` not `map[string][]string`. Because `Header` has a `Get` method https://golang.org/pkg/net/http/#Header.Get that directly returns you a string, so your method would be:\r\n\r\n```go\r\nfunc extractContinuationTokenFromHeaders(h http.Header) {\r\n    if h.Get(key1) != \"\" && h.Get(key2) != \"\" { return &CT{h.Get(key1), h.Get(key2) }\r\n    return nil\r\n}\r\n```\r\n\r\nit has been a lot clearer, ha? :wink: ","created_at":"2016-03-24T16:54:46Z","updated_at":"2016-03-24T16:54:46Z","html_url":"https://github.com/Azure/azure-sdk-for-go/pull/217#discussion_r57348999","pull_request_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217","_links":{"self":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/comments/57348999"},"html":{"href":"https://github.com/Azure/azure-sdk-for-go/pull/217#discussion_r57348999"},"pull_request":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217"}}},"pull_request":{"url":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217","id":45951749,"html_url":"https://github.com/Azure/azure-sdk-for-go/pull/217","diff_url":"https://github.com/Azure/azure-sdk-for-go/pull/217.diff","patch_url":"https://github.com/Azure/azure-sdk-for-go/pull/217.patch","issue_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/issues/217","number":217,"state":"open","locked":false,"title":"Azure table implementation","user":{"login":"MindFlavor","id":431595,"avatar_url":"https://avatars.githubusercontent.com/u/431595?v=3","gravatar_id":"","url":"https://api.github.com/users/MindFlavor","html_url":"https://github.com/MindFlavor","followers_url":"https://api.github.com/users/MindFlavor/followers","following_url":"https://api.github.com/users/MindFlavor/following{/other_user}","gists_url":"https://api.github.com/users/MindFlavor/gists{/gist_id}","starred_url":"https://api.github.com/users/MindFlavor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MindFlavor/subscriptions","organizations_url":"https://api.github.com/users/MindFlavor/orgs","repos_url":"https://api.github.com/users/MindFlavor/repos","events_url":"https://api.github.com/users/MindFlavor/events{/privacy}","received_events_url":"https://api.github.com/users/MindFlavor/received_events","type":"User","site_admin":false},"body":"### Azure tables\r\nAn implementation of Azure Tables REST API using JSON instead of XML where possible. I strove to be aligned with the existing storage code so the usage is pretty straightforward:\r\n\r\n```go\r\nerr := cli.CreateTable(tn)\r\nerr := cli.DeleteTable(tn)\r\n```\r\nI could have mapped the entities to maps (```map[string]interface{}```) like it's done in the python Azure SDK but that would be awkward in golang: json and xml packages are able to handle custom structs using reflection so I did here too. For insert just pass the storage.TableEntity implementing struct and it will be marshalled automatically:\r\n```go\r\nce := &CustomEntity{Name: \"Luke\", Surname: \"Skywalker\", SomeDate: time.Now(), Number: 60, PKey: \"pkey\", RKey: \"5\"}\r\n\r\nerr := cli.InsertOrReplaceEntity(tn, ce)\r\n```\r\nAs for unmarshaling you have to specify the type you are expecting:\r\n\r\n```go\r\nentries, contToken, err = cli.QueryTableEntities(tn, nil, reflect.TypeOf(ce), 10, \"\")\r\n````\r\n\r\nNote that these methods store in Azure table rows (without hierarchy) so nested structs should not work by design.\r\n\r\nThere are more examples in the test files. \r\n \r\n### storage.TableEntity interface\r\n```go\r\ntype TableEntity interface {\r\n\tPartitionKey() string\r\n\tRowKey() string\r\n\tSetPartitionKey(string) error\r\n\tSetRowKey(string) error\r\n}\r\n```\r\nImplement this interface to store your structs in Azure Tables.\r\nThis interface requires you to specify the partition and row keys as getter/setter. This way you can are free to represent the Azure Table primary key in your struct as you see fit. \r\n\r\n### table tag\r\nThe marshaler allows you to avoid persisting in Azure tables certain attributes. Just append the table:- (table minus) tag and it will be ignored. For example:\r\n```go\r\ntype CustomEntity struct {\r\n\tName     string `json:\"name\"`\r\n\tSurname  string `json:\"surname\"`\r\n\tSomeDate time.Time\r\n\tNumber   int\r\n\tPKey     string `json:\"pk\" table:\"-\"`\r\n\tRKey     string `json:\"rk\" table:\"-\"`\r\n}\r\n```\r\nIn this case the fields ```PKey``` and ```RKey``` won't be stored. This is useful because Azure Tables always require you to have the ```PartitionKey``` and ```RowKey``` fields so if you were to store ```PKey``` and ```RKey``` too you will end up duplicating the information. \r\nThe code will call your ```TableEntity.SetPartitionKey``` and ```TableEntity.SetRowKey``` methods during unmarshal allowing you to restore the ignored fields correctly.\r\n\r\n### Comments\r\nThe code is very poorly commented. Most methods lack the proper description. I will add them as soon as I can.\r\n\r\n### ToDo\r\n* The biggest todo is to return the ```If-Match``` header in the Entity get methods. Without it you cannot use optimistic concurrency in deletes. The ```DeleteEntity``` method supports is anyway so it's just a matter to return it to the GetEntity callers.\r\n* Better support for OData queries. Right now you can specify only the ```$filter``` param and you have to construct it by hand. Azure Tables also support the ```$select``` parameter for projection but I have not inserted the code here. It should be easy though. What would be harder is to implement the odata protocol. There is a project on that here (https://github.com/amsokol/go-odata) but I haven't looked at it yet.","created_at":"2015-09-24T21:23:21Z","updated_at":"2016-03-24T16:54:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dd1a9cde48bc35ecbe1077c02b5c5f0d1852c1ad","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217/commits","review_comments_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217/comments","review_comment_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/issues/217/comments","statuses_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/statuses/beef9429f8d01e15889ddb03f75d23a0096c71be","head":{"label":"MindFlavor:azure_table","ref":"azure_table","sha":"beef9429f8d01e15889ddb03f75d23a0096c71be","user":{"login":"MindFlavor","id":431595,"avatar_url":"https://avatars.githubusercontent.com/u/431595?v=3","gravatar_id":"","url":"https://api.github.com/users/MindFlavor","html_url":"https://github.com/MindFlavor","followers_url":"https://api.github.com/users/MindFlavor/followers","following_url":"https://api.github.com/users/MindFlavor/following{/other_user}","gists_url":"https://api.github.com/users/MindFlavor/gists{/gist_id}","starred_url":"https://api.github.com/users/MindFlavor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MindFlavor/subscriptions","organizations_url":"https://api.github.com/users/MindFlavor/orgs","repos_url":"https://api.github.com/users/MindFlavor/repos","events_url":"https://api.github.com/users/MindFlavor/events{/privacy}","received_events_url":"https://api.github.com/users/MindFlavor/received_events","type":"User","site_admin":false},"repo":{"id":43091870,"name":"azure-sdk-for-go","full_name":"MindFlavor/azure-sdk-for-go","owner":{"login":"MindFlavor","id":431595,"avatar_url":"https://avatars.githubusercontent.com/u/431595?v=3","gravatar_id":"","url":"https://api.github.com/users/MindFlavor","html_url":"https://github.com/MindFlavor","followers_url":"https://api.github.com/users/MindFlavor/followers","following_url":"https://api.github.com/users/MindFlavor/following{/other_user}","gists_url":"https://api.github.com/users/MindFlavor/gists{/gist_id}","starred_url":"https://api.github.com/users/MindFlavor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MindFlavor/subscriptions","organizations_url":"https://api.github.com/users/MindFlavor/orgs","repos_url":"https://api.github.com/users/MindFlavor/repos","events_url":"https://api.github.com/users/MindFlavor/events{/privacy}","received_events_url":"https://api.github.com/users/MindFlavor/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MindFlavor/azure-sdk-for-go","description":"Microsoft Azure SDK for Go","fork":true,"url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go","forks_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/forks","keys_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/teams","hooks_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/hooks","issue_events_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/issues/events{/number}","events_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/events","assignees_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/assignees{/user}","branches_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/branches{/branch}","tags_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/tags","blobs_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/git/refs{/sha}","trees_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/statuses/{sha}","languages_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/languages","stargazers_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/stargazers","contributors_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/contributors","subscribers_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/subscribers","subscription_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/subscription","commits_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/commits{/sha}","git_commits_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/git/commits{/sha}","comments_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/comments{/number}","issue_comment_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/issues/comments{/number}","contents_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/contents/{+path}","compare_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/merges","archive_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/downloads","issues_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/issues{/number}","pulls_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/pulls{/number}","milestones_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/milestones{/number}","notifications_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/labels{/name}","releases_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/releases{/id}","deployments_url":"https://api.github.com/repos/MindFlavor/azure-sdk-for-go/deployments","created_at":"2015-09-24T20:39:41Z","updated_at":"2015-09-24T20:39:42Z","pushed_at":"2016-03-24T16:38:00Z","git_url":"git://github.com/MindFlavor/azure-sdk-for-go.git","ssh_url":"git@github.com:MindFlavor/azure-sdk-for-go.git","clone_url":"https://github.com/MindFlavor/azure-sdk-for-go.git","svn_url":"https://github.com/MindFlavor/azure-sdk-for-go","homepage":"","size":2119,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Azure:master","ref":"master","sha":"4b6c14dbd6d1c060f7f730d6226e5627c619d229","user":{"login":"Azure","id":6844498,"avatar_url":"https://avatars.githubusercontent.com/u/6844498?v=3","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"repo":{"id":22855240,"name":"azure-sdk-for-go","full_name":"Azure/azure-sdk-for-go","owner":{"login":"Azure","id":6844498,"avatar_url":"https://avatars.githubusercontent.com/u/6844498?v=3","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Azure/azure-sdk-for-go","description":"Microsoft Azure SDK for Go","fork":false,"url":"https://api.github.com/repos/Azure/azure-sdk-for-go","forks_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/forks","keys_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/teams","hooks_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/hooks","issue_events_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/issues/events{/number}","events_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/events","assignees_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/assignees{/user}","branches_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/branches{/branch}","tags_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/tags","blobs_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/git/refs{/sha}","trees_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/statuses/{sha}","languages_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/languages","stargazers_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/stargazers","contributors_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/contributors","subscribers_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/subscribers","subscription_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/subscription","commits_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/commits{/sha}","git_commits_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/git/commits{/sha}","comments_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/comments{/number}","issue_comment_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/issues/comments{/number}","contents_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/contents/{+path}","compare_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/merges","archive_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/downloads","issues_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/issues{/number}","pulls_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls{/number}","milestones_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/milestones{/number}","notifications_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/labels{/name}","releases_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/releases{/id}","deployments_url":"https://api.github.com/repos/Azure/azure-sdk-for-go/deployments","created_at":"2014-08-11T21:18:43Z","updated_at":"2016-03-22T08:44:00Z","pushed_at":"2016-03-24T16:38:24Z","git_url":"git://github.com/Azure/azure-sdk-for-go.git","ssh_url":"git@github.com:Azure/azure-sdk-for-go.git","clone_url":"https://github.com/Azure/azure-sdk-for-go.git","svn_url":"https://github.com/Azure/azure-sdk-for-go","homepage":"http://godoc.org/github.com/Azure/azure-sdk-for-go/","size":2373,"stargazers_count":142,"watchers_count":142,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":74,"mirror_url":null,"open_issues_count":30,"forks":74,"open_issues":30,"watchers":142,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217"},"html":{"href":"https://github.com/Azure/azure-sdk-for-go/pull/217"},"issue":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/issues/217"},"comments":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/issues/217/comments"},"review_comments":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217/comments"},"review_comment":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/pulls/217/commits"},"statuses":{"href":"https://api.github.com/repos/Azure/azure-sdk-for-go/statuses/beef9429f8d01e15889ddb03f75d23a0096c71be"}}}}